2016-04-26 14 views
0
私が意味するように思わエラー

ファイルシステム列挙子投げるエラー

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. 

を取得していますしかし、私は別のシェア

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); 
     } 
    } 
} 

にマップされたフォルダに以下のコードを呼び出しています

がに問題があります単純にファイルを列挙していますが、これまでにこのエラーを見たことがなく、Googleで何も見つかりませんでした。誰もこれを見たことがありますか?

+0

@kyle「foreach(var fi in di.EnumerateFiles())」行で 'EnumerateFiles()'を呼び出すと、それが起こっているのは明らかです。具体的には、列挙型の作成に失敗しています。 – juharr

+1

これはUNCパスにありますか?関連性があります。https://support.microsoft.com/en-us/kb/2686098 – Luaan

答えて

1

「無効な署名」というWin32エラーが表示されます。これはセキュリティネゴシエーションが失敗し、リモートファイルシステム上のファイルを列挙しようとしていることを示唆しています。これは、セキュリティ資格情報が無効であるか、クライアントがサーバーが受け入れるのに十分な高さのSMBバージョンをサポートしていないことを意味します。 https://support.microsoft.com/en-us/kb/2686098

しかし要旨は次のとおりです:

次のKB資料が関連する可能性があなたのコードのせいではない可能性が高いです、これは、システム/ネットワーク管理者の問題です。システムが正しく構成され更新されていることを確認してください。

+0

ありがとうございます。これはAzure Batchにあり、コードはバッチVM上で実行され、VM上のローカルドライブをAzure File Storage内の場所にマッピングします。それはプログラムの開始時に働いたか、それほど進んでいないでしょうが、実行途中で資格情報を無効にする何かが起こったため、再アクセスしようとしたときに失敗しました。また、別のプロセスがファイルの1つにアクセスしていた場合、列挙は失敗する可能性がありますか? – NZJames

+0

@NZJames列挙型でも何らかの同期が必要ですが、私が知っている限り、FS/OSはドライブの不変のスナップショットを列挙しているようなふりをしています古い情報を読むことができますが、誰かが何かを書いたり削除したりすることによって影響を受けるべきではありません。どのような操作が失敗するのはなぜですか?私がリンクしているKB記事では、実行している操作の種類によってエラーが異なる場合があります。ファイル列挙は 'dir'グループに入るでしょう - 他の場合にうまくいく他の種類の操作をしているのでしょうか? – Luaan

0

コードに問題はありません。これは、ディレクトリ内のファイルに対するアクセス権の問題が原因である可能性があります。

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

これは、反復処理を行っているディレクトリに問題がある可能性があります。あなたのアプリケーションがディレクトリに完全なアクセス権を持っていることを確認します。

関連する問題