errorCode для процесса не может получить доступ к файлу 'XYZ', потому что он используется другим процессом - PullRequest
2 голосов
/ 15 июля 2010

Я использую C # .NET, vs 2008, .net 3.5

Для меня это сложно, но мне нужен пример кода в C # для этого:

  1. Как получить ошибкукод IOException «Процесс не может получить доступ к файлу 'XYZ', потому что он используется другим процессом."

Например, в моем номере.

Я пытаюсь удалить файл и получаю сообщение «Процесс не может получить доступ к файлу« XYZ », поскольку он используется другим процессом».Исключение.

try
{
    File.Delete(infoFichero.Ruta);
}
catch (IOException ex)
{
    // ex.Message == "The process cannot access the file 'XYZ' because it is being used by another process."
}

Но если .NET - это испанский, я получаю сообщение "Все сообщения не принимаются". 00000004.PDF ".

System.IO.IOException: El proceso no puede obtener acceso al archivo '00000004.PDF' porque está siendo utilizado en otro proceso.
   en System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   en System.IO.FileInfo.Delete()

Мне нужен КОД ОШИБКИ для этого исключения.В трассировке я видел System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath)

Как получить код ошибки IOException «Процесс не может получить доступ к файлу« XYZ », поскольку он используется другимпроцесс."

Ответы [ 4 ]

9 голосов
/ 16 июля 2010

Возможно, вы заметили, что свойство HResult недоступно. Обходной путь должен использовать метод Marshal.GetLastWin32Error () для получения собственного кода ошибки Windows. Как это:

        catch (IOException ex) {
            int err = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
            if (err == 32) Console.WriteLine("It's locked");
            // etc..
        }

Код ошибки 32 в SDK называется ERROR_SHARING_VIOLATION.

1 голос
/ 15 июля 2010

(помечено CW, потому что это действительно расширенный комментарий)

Зачем вам нужен код ошибки?

  • Собираетесь ли вы предпринять другое действие на основе одного кода в сравнении с другим кодом?
  • Что вы будете делать, если Windows или .NET изменятся, и вы вдруг получите другой код ошибки для той же проблемы?
  • Что вы хотите сделать, если вы не можете удалить тот же файл, но по другой причине? На самом деле, может быть, ваша новая проблема даже не бросит IOException.
0 голосов
/ 15 июля 2010

есть свойство HResult в исключении (IO-), которое содержит код ошибки.Согласно этому списку код ошибки для вашего исключения должен быть 0x20 (хотя я этого не пробовал).Надеюсь, это поможет.

0 голосов
/ 15 июля 2010

Посмотрите на свойство HRESULT класса IOException. Это должно вернуть Win32 HRESULT операции (что, я думаю, вы ищете?).

...