Перезаписать файл, который в данный момент открыт и используется в c # - PullRequest
0 голосов
/ 04 декабря 2018

Я использую C # для создания графического интерфейса, который имеет функцию ведения журнала.Когда я создаю файл журнала, я предоставляю ему имя файла.Но у меня есть следующая проблема.Например, если файл уже открыт в фоновом режиме на моем рабочем столе, и я хочу назвать свое имя файла таким же, я получаю сообщение об исключении следующим образом:

The process cannot access the file 'C:\blah\blah\mytest.csv' because it is being used by another process.

Я использую следующий фрагменткод для проверки, существует ли файл, и использование потокового редактора для создания нового файла.

if (FileUtils.Exists(fileName))
            {
                if (!FileUtils.Delete(fileName))
                {
                    cout<< Error replacing log file, it might be used by another process"; 
                }             
            }

//Exception handling
     public static bool Delete(string myfiletowrite)
            {
                try
                {
                    File.Delete(myfiletowrite);
                    return true;
                }
                catch (IOException)
                {
                    return false;
                }
            } 
myfile= new StreamWriter(myfiletowrite, true); //exception occurs here when I try to write to myfiletowrite which is currently open 

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

1 Ответ

0 голосов
/ 05 декабря 2018

Если другое приложение явно не разрешило его (через режим общего доступа), открыть файл для записи невозможно.

Если другое приложение находится под вашим контролем, у вас есть несколько вариантов (открытьфайл с FileShare.Write, реализовать некоторый протокол связи между двумя приложениями, использовать общую службу для доступа к файлу, ...).

Лучшим вариантом будет выбрать другое имя файла.

...