Будет ли когда-нибудь строка.Trim () удалять * допустимые * символы из имени файла? - PullRequest
4 голосов
/ 13 апреля 2009

Я создаю класс для хранения имени файла. Для этого мне нужно точно знать, какие символы недопустимы и какие символы недопустимы в качестве начальных / конечных символов .

Проводник Windows автоматически обрезает начальные и конечные пробельные символы при именовании файла, поэтому мне нужно обрезать эти же символы при создании экземпляра имени файла.

Я думал об использовании string.Trim (), но было бы наивно предполагать, что набор символов по умолчанию, который он усекает, точно совпадает с недопустимыми символами начального / конечного имени файла в ОС.

Документация для string.Trim () говорит, что по умолчанию обрезает следующие символы: U + 0009, U + 000A, U + 000B, U + 000C, U + 000D, U + 0020, U + 0085, U + 00A0, U + 1680, U + 2000, U + 2001, U + 2002, U + 2003, U + 2004, U + 2005, U + 2006, U + 2007, U + 2008, U + 2009, U + 200A, U + 200B, U + 2028, U + 2029, U + 3000, U + FEFF

К сожалению, некоторые из вышеперечисленных символов НЕ являются недопустимыми в файле, поскольку их нет в наборе символов, возвращаемом System.IO.Path.GetInvalidFileNameChars.

Могу ли я затем исправить эту строку. Возможно, триммер () может удалить допустимые начальные / конечные символы из имени файла, что приведет к повреждению имени файла?

Что такое недопустимые начальные / конечные символы для имени файла в ОС Windows Vista? Я понимаю, что они не обязательно совпадают с самой файловой системой, поскольку ОС может работать на другом файле системы.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2009

Тогда я исправлю эту строку. Трим () потенциально может удалить VALID ведущие / конечные символы из имя файла, поэтому портит имя файла

Да. Тем более в UNIX-подобных системах, где «X» является допустимым именем файла и отличается от «x»

3 голосов
/ 13 апреля 2009

Имена файлов могут начинаться / заканчиваться пробелами. Обрезка устранит их.

Имена файлов не могут содержать

/ \ : * ? " | < >
1 голос
/ 13 апреля 2009

Этот код запускается и создает файл:

Imports System.IO
Module Module1

Sub Main()
    Dim fs As New FileStream("d:\temp\   file . foo ", FileMode.Create, _
       FileAccess.Write)
    'declaring a FileStream and creating a word document file named file with
    'access mode of writing
    Dim s As New StreamWriter(fs)
    'creating a new StreamWriter and passing the filestream object fs as argument
    s.BaseStream.Seek(0, SeekOrigin.End)
    'the seek method is used to move the cursor to next position to avoid text to be
    'overwritten
    s.WriteLine("This is an example of using file handling concepts in VB .NET.")
    s.WriteLine("This concept is interesting.")
    'writing text to the newly created file
    s.Close()
End Sub

End Module

ПРИМЕЧАНИЕ. Фактическое имя файла, созданного с помощью вышеуказанного кода, выглядит как "file. Foo". Если я редактирую имя файла в Проводнике, места там нет, но при повторном запуске кода выше он заменяет файл.

ПРИМЕЧАНИЕ: я взял код из http://www.startvbdotnet.com/files/default.aspx и добавил пробелы

ПРИМЕЧАНИЕ. Я заметил, что переименование Проводника в Vista не позволит вам добавлять пробелы до или после имени файла, поэтому вы можете использовать «foo. Txt», но не «foo.txt», используя этот метод.

...