ფაილის სახელის სიგრძე win7-ში
ექსპერიმენტის მეორე სერია
დღეს კონსულტაციაზე ასეთი კითხვა დაისვა, რამდენი სიმბოლოსგან უნდა შედგებოდეს ფაილის სახელი? თავიდან თითქოს ყველაფერი ნათელი იყო „255 მასწ“. მაგრამ ისტ სახელმძღვანელოში 256 რატომ წერიაო..... ვიკიპედიამაც 255იო.
როგორც აღმოჩნდა საკმაოდ ჩახლართული სიტრუაციაა.
მე მარტივი ექპერიმენტით ვეცადე საკითხში გავრკვეულვიყავი და უფრო ავიხლართე
დესკტოპზე ვორდის ფაილს დავარქვი სახელი ბეეეევრი ერთიანი. რაღაც პერიოდში მეტის ჩაწერის უფლება რომ არ მომცა, გავჩერდი და დავიწყე ერთიანების დათვლა. როგორ ფიქრობთ რა რიცხვი მივიღე?
თამამად შემიძლია გითხრათ, ვერ გაარტყით. (პასუხი ნახეთ ცოტა ქვევით)
ამის შემდეგ დე დისკზე (d:\) აქ დავიწყე ვორდის ფაილის შექმნა ბევრი ერთიანებით. როცა დავითვალე მაქსიმალური რაოდენობა, აღმოჩნდა 239 (244) სიმბოლო. ამას დავამატე .docx გამოვიდა 244 კიდევ 3 სიმბოლო d:\ სულ 247. ამით ჩემი ექსპერიმენტი დასრულდა.
წავედი გუგლში,
წყარო: http://windows.microsoft.com/en-us/windows/file-names-extensions-faq#1TC=windows-7
მეორე ვარიანტი: http://stackoverflow.com/questions/1065993/has-windows-7-fixed-the-255-character-file-path-limit
ამ დოკუმენტში შემოტანილია ფაილის სრული სახელის (the complete path to the file ) ცნება, და აღნიშნულია რომ ფაილის სახელის სრული სიგრძე არ უნდა აღემატებოდეს 260 სიმბოლოს
ამიტომაც შესაძლებელიაო, რომ თუ გრძელსახელიან ფაილს ერთი საქაღალდიდან უფრო შიგნით მდებარე საქაღალდეში გადაიტანთ, შეცდომას გადააწყდეთ. სურათზეც ზუსტად ეს შეცდომაა ნაჩვენები, იმიტომ რომ დესკტოპზე დადებული ფაილის სრული სახელი სხვადასხვა სისტემებში განსხვადება. ის სურათი: DM მომხმარებლის სახელია სისტემაში. ეს სახელი სხვა კომპიუტერზე სულ სხვა სიგრძის შეიძლება იყოს. ესეც პასუხი.... უფრო სწორედ ცხრაუცნობიანი განტოლება.
How long can a file name be?
მეორე განმარტება:წყარო: http://windows.microsoft.com/en-us/windows/file-names-extensions-faq#1TC=windows-7
და ნაწყვეტი მესამე ვარიანტიდან:
Naming Files, Paths, and Namespaces
https://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspxNaming Conventions
The following fundamental rules enable applications to create and process valid names for files and directories, regardless of the file system:
- Use a period to separate the base file name from the extension in the name of a directory or file.
- Use a backslash (\) to separate the components of a path. The backslash divides the file name from the path to it, and one directory name from another directory name in a path. You cannot use a backslash in the name for the actual file or directory because it is a reserved character that separates the names into components.
- Use a backslash as required as part of volume names, for example, the "C:\" in "C:\path\file" or the "\\server\share" in "\\server\share\path\file" for Universal Naming Convention (UNC) names. For more information about UNC names, see the Maximum Path Length Limitation section.
- Do not assume case sensitivity. For example, consider the names OSCAR, Oscar, and oscar to be the same, even though some file systems (such as a POSIX-compliant file system) may consider them as different. Note that NTFS supports POSIX semantics for case sensitivity but this is not the default behavior. For more information, see CreateFile.
- Volume designators (drive letters) are similarly case-insensitive. For example, "D:\" and "d:\" refer to the same volume.
- Use any character in the current code page for a name, including Unicode characters and characters in the extended character set (128–255), except for the following:
- The following reserved characters:
- < (less than)
- > (greater than)
- : (colon)
- " (double quote)
- / (forward slash)
- \ (backslash)
- | (vertical bar or pipe)
- ? (question mark)
- * (asterisk)
- Integer value zero, sometimes referred to as the ASCII NUL character.
- Characters whose integer representations are in the range from 1 through 31, except for alternate data streams where these characters are allowed. For more information about file streams, see File Streams.
- Any other character that the target file system does not allow.
- Use a period as a directory component in a path to represent the current directory, for example ".\temp.txt". For more information, see Paths.
- Use two consecutive periods (..) as a directory component in a path to represent the parent of the current directory, for example "..\temp.txt". For more information, see Paths.
- Do not use the following reserved names for the name of a file:CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. Also avoid these names followed immediately by an extension; for example, NUL.txt is not recommended. For more information, see Namespaces.
- Do not end a file or directory name with a space or a period. Although the underlying file system may support such names, the Windows shell and user interface does not. However, it is acceptable to specify a period as the first character of a name. For example, ".temp".
მაშ, რამდენი?
და ბოლოს
რა სიმბოლოების გამოყენება არ შეიძება ფაილის სახელში
- < (less than)
- > (greater than)
- : (colon)
- " (double quote)
- / (forward slash)
- \ (backslash)
- | (vertical bar or pipe)
- ? (question mark)
- * (asterisk)
მეორე სერია
დღეს გოგას კომენტარმა ისევ ექსპერიმენტისკენ მიბიძგა
ჯერ მელიას ვთხოვე ფაილი შეენახა დე დისკზე. ჩემი 239 ცალი ერთიანი მოქონდა დაკოპირებილი, რომელიც ფაილის სახელის ველში ჩავსვი. მერე ვეცადე სიმბოლოები დამემატებინა. და კარგად გაემატა, მინიმუმ 20 ცალი მაინც. რაღაც პერიოდში კი სიმბოლოების დამატება შეწყდა.
როცა ფაილის დამახსოვრება ვეცადე, დიალოგურმა ფანჯარამ მწარედ იუარა და გამომიტანა შეტყობინება, რომ ფაილის სახელი საკმაოდ გრძელიაო
მელიამ ერთიანები შეიცხადა |
აგრეთვე არ შეიძლება შემდეგი კომბინაციების გამოყენება ნებისმიერი ტიპის ფაილისთვის CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
გთხოვთ გამოთქვათ თქვენი აზრი და სიახლეები ამ ტემასტან დაკავშირებით
შემდეგ თითო-თითოდ დავიწყე ერთიანების წაშლა. ყოველ ჯერზე ანალოგიური შეცდომა გამოდიოდა. აშკარად 255-ზე მეტი იყო ერთიანების როდენობა. მაგრამ რამდენიმე ხანში ახალი შეცდომა გამოვიდა
C:\ დისკზე მხოლოდ ახალი საქაღალდის შექმნა შეიძლება
შემდეგ თითო-თითოდ დავიწყე ერთიანების წაშლა. ყოველ ჯერზე ანალოგიური შეცდომა გამოდიოდა. აშკარად 255-ზე მეტი იყო ერთიანების როდენობა. მაგრამ რამდენიმე ხანში ახალი შეცდომა გამოვიდა
სინტაქსში გეშლებაო, მე კი დარწმუნებული ვიყავი რომ არაფერიც შემშლია. კიდევ ერთი ერთიანის წაშლის შემდეგ, ოპერაცია წარმატებით დასრულდა
დავიწყე ახალმიღებულ ფაილზე ერთიანების დათვალა და მართლაც გაფართოებასთან ერთად 255 გამოვიდა. მკაცრად 255.
კიდევ ერთი აღმოჩენა ეს შეტყობინება იყო
კიდევ სიახლე:
ეს მოზილას შეტყობინებაა
ეს კი ვორდი. ანუ დღეიდან c:\ საქაღალდეში ფაილებს ვერ შეინახავთ :)
(თუმცა კოპირებაზე ჩაიკნავლებს, ადმინისტრატორი ხომ ხარო, და მერე მაინც ჩაგაწერინებს. კო-პი-რე-ბაზე! პირდაპირ ვერ ჩაწერთ და მარჯვენა კლავიშითაც ვერ შექმნით)
ეს და ამგვარად
ფაილის სახელის სიგრძის ძიება დასრულებულია
კაი ამოცანა გამოვიდა
სხვადასხვა ფაილურ სისტემაში განსხვავდება ფაილის სახელში გამოყენებული სიმბოლოების რაოდენობა. Fat სისტემაში მაქსიმუმი 255-ია გაფართოებიანად და რადგან თავიდან ეს ფაილური სისტემა იყო ალბათ კონკრეტულად ამ სისტემასთან არის დაკავშირებული.
ReplyDeleteსინამდვილეში რთული არაფერია: ოს ვინდოუსში ფაილის სახელის მაქსიმალური სიგრძე გაფართოების და წერტილის ჩათვლით არის 255. ფაილის სრული სახელი, მისამართის ჩათვლით შეიძლება შედგებოდეს მაქს. 259 სიმბოლოსგან. აქედან გამომდინარე, 255 სიმბოლოს გამოყენება შეიძლება მხოლოდ მაშინ, თუ ფაილს ქმნი ძირითად კატალოგში, რადგან + 4 სიმბოლო (დისკის სახელი, ორწერტილი და დახრილი ხაზები) = 259 სიმბოლოს ფაილის სრული სახელისთვის, ზოგადად ფაილის სახელის მაქსიმალური სიგრძეა 259-ს მინუს მისამართის სიგრძე.
ReplyDeleteთუ ვეცდებით 255 სიმბოლოიანი სახელის მქონე ფაილი (იგი შეიძლება არსებობდეს მხოლოდ ძირითად კატალოგში) გადავწეროთ ქვესაქაღალდეში, ვინდოუსი იძლევა შეცდომას, რადგან ახალი ფაილის სრული სახელი (ახალი, უფრო გრძელი მისამართის გამო) ცდება დაშვებულ 259 სიმბოლოს, ფაილის სახელის შეკვეცა მოგიწევთ ზუსტად იმ რაოდენობის სიმბოლოებით, რამდენი სიმბოლოსგანაც შედგება ქვესაქაღალდის სახელი, ანუ რამდენითაც გაიზარდა მისამართის სიგრძე.