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

StackOverflow https://stackoverflow.com/questions/743003

Вопрос

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

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

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

Документация for 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.

Могу ли я тогда исправить, что string.Trim() потенциально может удалить ДЕЙСТВИТЕЛЬНЫЕ начальные/конечные символы из имени файла, тем самым повреждая имя файла?

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

Это было полезно?

Решение

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

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

Другие советы

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

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

/ \ : * ? " | < >

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

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».фу».Если я отредактирую имя файла в Проводнике, места не будет, но когда я перезапущу приведенный выше код, он заменит файл.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top