C# Directory.GetFiles()引发异常-无法识别文件夹名称末尾有空格

C# Directory.GetFiles()引发异常-无法识别文件夹名称末尾有空格,c#,C#,我的文件夹名称如下所示: \\server\pictures\607\27022015\HARD\  //temp dir \\server\pictures\607\27022015\HARD\550528  //dir name (two spaces behind) macId //a string representative of a folder name (two spaces behind) 在我的代码中,我通过以下操作获得文件夹名称: if (Directory.Exists

我的文件夹名称如下所示:

\\server\pictures\607\27022015\HARD\  //temp dir
\\server\pictures\607\27022015\HARD\550528  //dir name (two spaces behind)
macId //a string representative of a folder name (two spaces behind)
在我的代码中,我通过以下操作获得文件夹名称:

if (Directory.Exists(tempDirectoryWithoutMac))
                {
                    var subDirectories = Directory.GetDirectories(tempDirectoryWithoutMac);

                    var directoryToSearch = subDirectories.Where(c => c.Contains(macId.Trim()));

                    if (directoryToSearch.Any())
                    {
                        var newDirectory = directoryToSearch.First();

                        foreach (string filename in Directory.GetFiles(newDirectory))
                        {
                            var retVal = new BitmapImage(new Uri(filename.TrimEnd()));

                            return retVal;
                        }
                    }
                }
如果我检查并将
newDirectory
复制并粘贴到Windows资源管理器中,它会将我带到文件夹中;但是,我的代码引发了一个异常:

The network path was not found.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileSystemEnumerableIterator`1.CommonInit()
   at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
   at System.IO.Directory.GetFiles(String path)
   at URM.ViewModels.CollectionsViewModel.GetImages(String macId, String type)
如果我尝试重命名文件夹,去掉末尾的空格…Windows会说…源文件名和目标文件名是相同的

编辑 我正在粘贴此路径(用于显示空格的引号):


“\\server\pictures\607\27022015\HARD\550528”

Windows资源管理器将删除目录输入末尾的多余空格。例如,尝试在某处创建一个名为“foo”的文件夹,然后尝试创建一个“foo”文件夹(末尾带有空格)。Windows会抱怨已经有一个同名文件夹。仅仅因为资源管理器程序接受了它并不能使它正确。使用空格来创建不同的文件夹可能不是最好的主意。

可以使用空格在文件系统条目(文件/文件夹)的末尾显示类似空格的字符,特别是:

使用此技巧,可以显示没有名称的文件夹

如果在文件夹上单击鼠标右键,选择“重命名”并仅输入空格,则操作系统将不接受该文件夹

要删除该名称并显示空白名称,请右键单击文件夹并选择“重命名”。现在按Alt键,然后从数字键盘按0160

文件系统不将其视为“正常”空间(
alt+0032
),而将其视为“无中断空间”。另请参见answers.microsoft.com上的此链接:“(询问者希望在文件夹名称的开头添加空格,以便在按字母顺序排列的列表中首先显示):

实际上,“无中断空间”是ALT+0160


Windows资源管理器中的解决方案

我认为,如果您将文件夹重命名,即从
“550528”
重命名为临时名称(例如
“temp”
),那么您将能够成功地将其重命名为
“550528”
(注意缺少空格)


代码中的解决方案


正如其他人所说,如果您在包含文件夹中,您将不必考虑就可以得到末尾带有正确特殊字符的条目。

如果您将DirectoryInfo和FileInfo对象用作常规字符串,那么您需要处理的空白问题将大大减少,并且能够实现更面向对象的,可靠的解决方案

您可以按如下方式执行此操作:

DirectoryInfo tempWithoutMac = new DirectoryInfo(tempDirectoryWithoutMac);

DirectoryInfo MacID = new DirectoryInfo(macId);

DirectoryInfo wantedDir = tempWithoutMac.GetDirectories.Where(c => c.Contains(MacID)).First();

foreach (FileInfo file in wantedDir.GetFiles())

{
       var retVal = new BitmapImage(new Uri(file.fullname));

       return retVal;
}
这只是一个例子,所以你需要调整它来为你工作,但使用这个概念应该会帮助你


干杯,

您要粘贴哪条路径。。你能把它作为你编辑的问题的一部分吗。。?还有哪一行抛出了错误。。确保该路径只有一个有效的路径,并且在其末尾没有文件名。。如果文件路径中有空格,则需要使用
@
文本文件夹名称作为path变量的前缀,不允许使用尾随空格。假设macId是字符串,它是包含整个文件路径的字符串还是仅包含目录本身的名称?GetDirectory(字符串路径)返回子目录全名的字符串。如果您想要文件夹的名称,请尝试从tempDirectoryWithoutMac创建DirectoryInfo的新实例,然后调用GetDirectories.Where(“filter”),这将为您提供一个DirectoryInfo对象的集合。如果您使用DirectoryInfo和FileInfo对象而不是它们的路径,则会更加可靠。请删除空格。初学者也可以尝试此
@“\server\pictures\607\27022015\HARD\550528\”
是的,但是如果您使用DirectoryInfo和FileInfo对象而不是普通字符串,则不会出现空格问题。面向对象编程是一种方式。文件夹与空间一起存在…当我复制并粘贴空间时…它与空间一起进入文件夹…长话短说,以这种方式保存文件的程序已被修改,但并不明显,因为我们没有意识到空间已经结束…然而,数以百计的照片都是这样保存的,所以必须对它们进行处理。。。