我正在尝试迭代本地目录中的文件:
foreach (string name in Directory.GetFileSystemEntries(path))
{
FileAttrtibutes att = File.GetAttributes(name)
}
path
文件夹中的一个文件名为"这是一个测试"。 GetAttributes()
会在带有空格的文件名上抛出异常。
除了用其他字符替换空格外,在这种情况下如何处理文件名中的空格?
我道歉。我有点草率。让我重新定义问题,即使我现在至少有一个解决方法。
这段代码显示了问题:
Uri u = new Uri(@"file:///c:/test/This is a test");
FileAttributes a = File.GetAttributes(u.AbsolutePath);
File.GetAttributes抛出System.IO.FileNotFoundException:找不到文件&#c; \ test \这个%20is%20a%20test'。 ' c:\ test \这是一个测试'存在。
所以似乎Uri.AbsolutePath为空间插入%20,我可以只做一个字符串替换来让我的代码工作。我不知道我应该做更换,但至少我可以让它工作。欢迎任何其他想法。
答案 0 :(得分:0)
根据MSDN,这些可能是例外,
<强>的ArgumentException 强>
path为空,仅包含空格或包含无效字符。
<强> PathTooLongException 强>
指定的路径,文件名或两者都超过系统定义的最大长度。例如,在基于Windows的平台上,路径必须少于248个字符,文件名必须少于260个字符。
<强> NotSupportedException异常强>
路径格式无效。
<强> FileNotFoundException异常强>
path表示文件并且无效,例如位于未映射的驱动器上,或者无法找到该文件。
<强> DirectoryNotFoundException 强>
path表示目录并且无效,例如位于未映射的驱动器上,或者无法找到目录。
<强> IOException的强>
该文件正由另一个进程使用。
<强> UnauthorizedAccessException 强>
来电者没有所需的许可。
由于你循环遍历目录中的条目,我可以在没有告诉我们异常的情况下做出的唯一猜测是该文件是否被其他进程使用,或者您的应用程序没有权限访问该文件
答案 1 :(得分:0)
我也遇到了类似的问题。
那是我的愚蠢解决方案:只需添加.Replace("%20", " ")
var assemblyPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath.Replace("%20", " ");