文件系统枚举器抛出错误

时间:2016-04-26 11:18:22

标签: c# .net ioexception

我将映射文件夹上的以下代码调用到另一个共享

private static void CheckFileNaming(string path)
{
    var di = new DirectoryInfo(path);
    foreach (var fi in di.EnumerateFiles())
    {
        if (fi.Name.EndsWith(".battxt"))
        {
            var name = fi.FullName.Substring(0, fi.FullName.Length - 3);
            TaskLogger("Rename " + fi.FullName + " to " + name);
            File.Move(fi.FullName, name);
        }
    }
}

但是我收到了错误

2016-04-26 11:00:58Z: Error occurred:    
   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.DirectoryInfo.EnumerateFiles()
   at Centrica.EMT.SE.CloudMaster.Program.CheckFileNaming(String path)
   at Centrica.EMT.SE.CloudMaster.Program.RunCombiner(String modelVersion, String pythonVersion)
2016-04-26 11:00:58Z: Invalid Signature.

这似乎意味着简单地枚举文件存在问题,但我之前从未见过这个错误,并且在谷歌上找不到任何东西。有没有人见过这个?

2 个答案:

答案 0 :(得分:1)

您收到Win32错误,"签名无效"。这表明安全协商失败,这反过来表明您正在尝试枚举远程文件系统上的文件。这可能意味着您的安全凭据无效,或者您的客户端不支持足够高的SMB版本以供服务器接受。

以下知识库文章可能相关:https://support.microsoft.com/en-us/kb/2686098

但要点是:你的代码很可能不会受到责备,这是系统/网络管理员的问题。确保系统配置和更新正确,你应该没问题。

答案 1 :(得分:0)

您的代码中没有问题。这可能是因为目录中文件的权限问题。

System.Security.SecurityException:
The caller does not have the required permission.

这可能是您正在迭代的目录的可能问题。确保您的应用程序在目录中具有完全访问权限(当然至少可以阅读)。