Не удается прочитать все строки в файле, которые используются другим процессом
Я пытаюсь прочитать все строки файла журнала, которые используются какой-либо программой.
Когда я пытался сделать это, я получаю исключение:
System.IO.IOException was unhandled : file used by another process
Поэтому я искал в Интернете и нашел ряд решений:
C # исключение. Файл используется другим процессом
Чтение файла журнала, используемого другим процессом
Какой наименее инвазивный способ чтения заблокированного файла в C # (возможно, в небезопасном режиме)?
C # Процесс не может получить доступ к файлу '' ', потому что он используется другим процессом
Файл используется другим процессом
http://coding.infoconex.com/post/2009/04/21/How-do-I-open-a-file-that-is-in-use-in-C
Общие решения должны использоватьusing
обернутьFileStream
и добавитьFileShare.ReadWrite
.
Я попробовал эти решения, но я все еще получаю исключение, что файл используется другим процессом.
В моем коде ниже я открываю файлD:\process.log
сделать файл использованным (для тестирования), а затем пытается открыть файл.
Исключение находится в строке:
using (FileStream fileStream = File.Open(i_FileNameAndPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
КОД:
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
DialogResult dialogResult = openFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK)
{
listView.Items.Clear();
File.Open(@"D:\process.log", FileMode.Open); //make the file being used
String fileNameAndPath = openFileDialog.FileName;
String[] fileContent = readAllLines(fileNameAndPath);
}
}
private String[] readAllLines(String i_FileNameAndPath)
{
String[] o_Lines = null;
int i = 0;
using (FileStream fileStream = File.Open(i_FileNameAndPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader streamReader = new StreamReader(fileStream))
{
while (streamReader.Peek() > -1)
{
String line = streamReader.ReadLine();
//o_Lines[i] = line;
i++;
}
}
}
return o_Lines;
}