不知何故,一个文件出现在我的一个目录中,它的扩展名末尾有空格-它的名字是“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它.我可以很容易地处理异常时找到的文件,但男孩我对此感到好奇!
3条答案
按热度按时间bgtovc5b1#
以空格结束文件名是一个坏主意。
来自MSDN "Naming Files, Paths, and Namespaces (Windows)":
此外,知识库文章"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本身的问题。
ehxuflar2#
是的,我知道这些文件。我也得到了一次这样的野兽的东西。为了摆脱它,我不知道在C#编程的方式,但良好的旧命令行是你的朋友:
在给定的文件夹中打开一个控制台窗口(或执行 cmd 并使用
cd
命令导航到该文件夹)。现在输入dir /x
以检索此目录中文件的短名称。使用此名称通过使用del
或ren
命令删除或重命名文件。swvgeqrz3#
如果您使用
\\?\
路径语法,则可以操作带有尾随空格的文件(以及其他边缘情况):\\?\c:\somedir\test.txt
.