4

我正在创建一个类来存储文件名。为此,我需要确切知道哪些字符无效以及哪些字符作为前导/尾随字符无效。

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 返回的字符集中。

然后我是否更正了 string.Trim() 可能会从文件名中删除 VALID 前导/尾随字符,从而损坏文件名?

Windows Vista 操作系统中文件名的无效前导/尾随字符到底是什么? 我知道它们不一定与文件系统本身相同,因为操作系统可以在不同的文件系统上运行。

4

3 回答 3

3

文件名可以以空格开始/结束。修剪将消除它们。

文件名不能包含

/ \ : * ? " | < >
于 2009-04-13T04:01:01.917 回答
3

然后我是否更正了 string.Trim() 可能会从文件名中删除 VALID 前导/尾随字符,从而损坏文件名?

是的。在类 UNIX 系统上更是如此,其中“X”是一个有效的文件名并且不同于“x”

于 2009-04-13T04:01:20.730 回答
1

此代码运行并创建文件:

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”。

于 2009-04-13T04:10:30.083 回答