2016-04-26 3 views
0

Я звоню следующий код на отображенной папки в другую акциюфайла Перечислитель метания ошибка

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. 

который, кажется, подразумевает, есть проблема с просто перечисляя файлы, но я никогда не видел эту ошибку раньше и не могу найти что-либо в Google. Кто-нибудь видел это раньше?

+0

@kyle Очевидно, что это происходит, когда они вызывают 'EnumerateFiles()' на строке 'foreach (var fi di di.EnumerateFiles()). В частности, он не может создать перечислимый. – juharr

+1

Это на UNC-пути? Это может быть актуально: https://support.microsoft.com/en-us/kb/2686098 – Luaan

ответ

1

Вы получаете ошибку Win32, «Invalid Signature». Это говорит о невозможности согласования безопасности, что, в свою очередь, предполагает, что вы пытаетесь перечислить файлы в удаленной файловой системе. Это может означать, что ваши учетные данные безопасности недействительны или что ваш клиент не поддерживает версию SMB, достаточно высокую для принятия сервером.

Следующая KB статья может иметь отношение: https://support.microsoft.com/en-us/kb/2686098

Но суть в том: ваш код, скорее всего, не виноваты, это система/сетевой администратор вопрос. Убедитесь, что системы настроены и обновлены правильно, и все должно быть в порядке.

+0

Спасибо, это звучит правильно. Это выполняется в Azure Batch, код выполняется на пакетной виртуальной машине, сопоставляя локальный диск на виртуальной машине с местоположением в хранилище файлов Azure. Он работал в начале программы, или он не дошел бы до этого, но, возможно, что-то случилось, чтобы аннулировать учетные данные на полпути через выполнение, поэтому, когда он попытался повторно получить доступ, он не удался. Также может ли перечислить возможность сбоя, если другой процесс обратился к одному из файлов? Я бы подумал, что перечисление было прочитано только, но, возможно, не – NZJames

+0

@NZJames Ну, даже перечисление требует какой-то синхронизации, но, насколько мне известно, FS/OS притворяется, что вы перечисляете неизменный моментальный снимок диска , так что вы можете прочитать устаревшую информацию, но на вас не должно влиять кто-то другой, пишущий/удаляющий что-то. Что касается того, почему в какой-то момент операция только завершилась неудачей - статья, связанная с KB, я обнаружил, что ошибки могут отличаться в зависимости от того, какую операцию вы выполняете. Перечисление файла попадет в группу 'dir' - возможно, вы выполняете какую-то другую операцию, которая отлично работает в вашем другом случае? – Luaan

0

В коде отсутствует проблема. Это может быть из-за проблем с правами на файлы в каталоге.

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

Это может быть проблема с каталогом, в котором вы выполняете итерацию. Убедитесь, что ваше приложение имеет полный доступ (по крайней мере, прочитанный курс) в каталоге.

Смежные вопросы