Могу ли я перезаписать файл, который используется?(С #) - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь перезаписать содержимое файла.Этот файл используется в большинстве случаев.Я знаю, как сделать это в Java, но я не уверен, как это сделать в C #.Вот что у меня сейчас:

    public bool ByteArrayToFile(string fileName, byte[] byteArray)
    {
        try
        {
            using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
            {
                fs.Write(byteArray, 0, byteArray.Length);
                return true;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception caught in process: {0}", ex);
            return false;
        }
    }

Я пытаюсь записать байтовый массив в файл.Я получаю байтовый массив из URL, используя WebClient.Когда файл используется, я получаю IOException, в котором говорится, что я не могу получить доступ к файлу, потому что он используется другим процессом.В Java я бы сделал это следующим образом, используя commons-io:

FileUtils.copyInputStreamToFile(new URL(url).openStream(), target);

Метод, описанный выше, сработал для меня, но я не могу воспроизвести его в C #.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 26 мая 2018

Вы не можете перезаписать используемый файл и заблокированный другим процессом в Windows.Вам нужно будет найти процесс, который имеет дескриптор файла, и завершить процесс, чтобы освободить дескриптор.

Если вы пишете или управляете программами / процессами, обращающимися к файлам, возможно, обратите внимание на использованиечто-то вроде следующего из System.IO:

FileStream.Lock - 'Запрещает другим процессам чтение или запись в FileStream'

FileStream.Unlock - 'Разрешает другим процессам доступ ко всему или части файла, который был ранее заблокирован.'

...