2016-04-26 7 views
0

ich auf einem zugeordneten Ordner in einen anderen Anteil den folgenden Code nenneDateisystem enumerator werfen Fehler

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

Jedoch habe ich die Störung erhalte

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. 

die es zu implizieren scheint ein Problem mit Einfach die Dateien aufzählen, aber ich habe diesen Fehler noch nie gesehen und kann bei Google nichts finden. Hat das jemand schon mal gesehen?

+0

@ kyle Offensichtlich passiert es, wenn sie 'EnumerateFiles()' auf der Zeile 'foreach (var fi in di.EnumerateFiles())' aufrufen. Insbesondere kann das Enumerable nicht erstellt werden. – juharr

+1

Ist dies auf einem UNC-Pfad? Dies könnte relevant sein: https://support.microsoft.com/en-us/kb/2686098 – Luaan

Antwort

1

Sie erhalten einen Win32-Fehler, "ungültige Signatur". Dies deutet darauf hin, dass eine Sicherheitsverhandlung fehlgeschlagen ist, was wiederum darauf hinweist, dass Sie versuchen, Dateien in einem Remote-Dateisystem aufzulisten. Dies kann bedeuten, dass Ihre Sicherheitsanmeldeinformationen ungültig sind oder dass Ihr Client keine SMB-Version unterstützt, die hoch genug für den Server ist.

Die folgende KB-Artikel relevant sein können: https://support.microsoft.com/en-us/kb/2686098

Aber das Wesentliche ist: Ihr Code am wahrscheinlichsten ist nicht schuld, das ist System/Netzwerk-Admin-Problem. Stellen Sie sicher, dass die Systeme richtig konfiguriert und aktualisiert sind, und Ihnen sollte nichts passieren.

+0

Danke, das klingt richtig. Dies ist in Azure Batch, der Code wird auf einer Batch-VM ausgeführt und weist ein lokales Laufwerk auf der VM einem Speicherort in Azure File Storage zu. Es funktionierte am Anfang des Programms oder es wäre nicht so weit gekommen, aber vielleicht passierte etwas, um die Anmeldeinformationen auf halbem Wege der Ausführung ungültig zu machen, so dass es fehlgeschlagen ist, wenn sie erneut versucht hat, darauf zuzugreifen. Würde eine Aufzählung auch fehlschlagen, wenn ein anderer Prozess auf eine der Dateien zugreift? Ich hätte gedacht, eine Aufzählung wurde nur gelesen, aber vielleicht nicht – NZJames

+0

@NZJames Nun, sogar Enumeration erfordert eine Art von Synchronisation, aber soweit ich weiß, täuscht das FS/OS vor, dass Sie eine unveränderliche Snapshot des Laufwerks auflisten , so dass Sie veraltete Informationen lesen können, aber Sie sollten nicht von jemandem beeinflusst werden, der etwas schreibt/löscht. Warum der Vorgang nur zu einem bestimmten Zeitpunkt fehlschlägt - der KB-Artikel, mit dem ich verlinkt habe, zeigt, dass die Fehler je nach Art der ausgeführten Operation abweichen können. Eine Dateiaufzählung würde in die 'dir 'Gruppe fallen - vielleicht machst du eine andere Art von Operation, die in deinem anderen Fall gut funktioniert? – Luaan

0

Es gibt kein Problem in Ihrem Code. Dies kann auf Berechtigungsprobleme mit den Dateien im Verzeichnis zurückzuführen sein.

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

Dies könnte ein mögliches Problem mit dem Verzeichnis sein, in dem Sie iterieren. Stellen Sie sicher, dass Ihre Anwendung vollen Zugriff auf das Verzeichnis hat (natürlich zumindest gelesen).