string.Trim()会从文件名中删除* valid *字符吗?

时间:2009-04-13 03:58:38

标签: .net filesystems whitespace filenames invalid-characters

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

Windows资源管理器在命名文件时自动修剪前导和尾随空白字符,因此在构造文件名实例时我需要修剪相同的字符。

我考虑过使用string.Trim(),但假设它修剪的默认字符集与操作系统的无效前导/尾随文件名字符完全一致,这是天真的。

Documentation表示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 < / p>

不幸的是,上面的一些字符在文件中并不是无效的,因为它们不在System.IO.Path.GetInvalidFileNameChars返回的字符集中。

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

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

3 个答案:

答案 0 :(得分:3)

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

文件名不能包含

/ \ : * ? " | < >

答案 1 :(得分:3)

  

我是否正确纠正了该字符串.Trim()   可能会删除VALID   a的前导/尾随字符   文件名,因此破坏了   文件名?

是。在类UNIX系统上更是如此,其中'X'是有效的文件名,与'x'

不同

答案 2 :(得分: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”。

相关问题