.net 文件扩展名后的空格->怪异的FileInfo行为

dtcbnfnu  于 2023-03-31  发布在  .NET
关注(0)|答案(3)|浏览(121)

不知何故,一个文件出现在我的一个目录中,它的扩展名末尾有空格-它的名字是“test.txt”。奇怪的是,Directory.GetFiles()返回给我这个文件的路径,但我无法用FileInfo类检索文件信息。
错误表现在:

DirectoryInfo di = new DirectoryInfo("c:\\somedir");
FileInfo fi = di.GetFileSystemInfos("test*")[0] as FileInfo; 
//correctly fi.FullName is "c:\somedir\test.txt "
//but fi.Exists==false (!)

FileInfo类是否损坏?我可以以某种方式检索有关此文件的信息吗?我真的不知道该文件是如何出现在我的文件系统中的,并且我无法重新创建其中的一些。
我所有的尝试创建一个新的文件与这种类型的扩展名都失败了,但现在我的程序是崩溃时encoutering它.我可以很容易地处理异常时找到的文件,但男孩我对此感到好奇!

bgtovc5b

bgtovc5b1#

以空格结束文件名是一个坏主意。

来自MSDN "Naming Files, Paths, and Namespaces (Windows)"

  • 不要以空格或句点结束文件名或目录名。尽管基础文件系统可能支持此类名称,但Windows shell 和用户界面不支持。

此外,知识库文章"INFO: Filenames Ending with Space or Period Not Supported"
当Macintosh客户端在Windows NT服务器上创建文件时,可能会出现问题。删除尾随空格和句点的代码不会执行,Macintosh用户将获得正确的标点文件名。Win32 API FindFirstFile()FindNextFile()返回以空格或句点结尾的文件名;但是,无法使用Win32 API创建或打开该文件。
DirectoryInfo可能使用FindFirstFile()和朋友来生成目录列表。File.Exists最有可能是通过GetFileAttributes()实现的,GetFileAttributes()可能与CreateFile()有相同的问题,并且会报告不存在的文件。
因此,这不是.NET中的问题,而是Windows本身的问题。

ehxuflar

ehxuflar2#

是的,我知道这些文件。我也得到了一次这样的野兽的东西。为了摆脱它,我不知道在C#编程的方式,但良好的旧命令行是你的朋友:
在给定的文件夹中打开一个控制台窗口(或执行 cmd 并使用cd命令导航到该文件夹)。现在输入dir /x以检索此目录中文件的短名称。使用此名称通过使用delren命令删除或重命名文件。

swvgeqrz

swvgeqrz3#

如果您使用\\?\路径语法,则可以操作带有尾随空格的文件(以及其他边缘情况):\\?\c:\somedir\test.txt .

相关问题