"다른 프로세스에서 사용 중" 예외가 발생한 경우에도 파일을 읽는 방법은 무엇입니까?
VB.NET 또는 C#에서 다른 프로그램에서 사용 중인 텍스트 파일의 내용을 읽으려고 합니다. 즉, 프로그램을 중지할 수 없거나 프로그램이 텍스트 파일에 쓰기를 중지하고 다른 프로그램의 텍스트 파일에 현재 있는 내용을 주기적으로 읽으려고 합니다.
사용 중인 코드입니다(VB.NET).
Dim strContents As String
Dim objReader As StreamReader
objReader = New StreamReader(FullPath)
strContents = objReader.ReadToEnd()
objReader.Close()
또는 C#:
var objReader = new StreamReader(FullPath);
var strContents = objReader.ReadToEnd();
objReader.Close();
그러나 위에서는 IO 예외 "프로세스가 파일 '파일에 액세스할 수 없습니다.txt'는 다른 프로세스에서 사용되고 있기 때문입니다."이 시나리오에 해결 방법이 있습니까?
FileStream logFileStream = new FileStream("c:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader logFileReader = new StreamReader(logFileStream);
while (!logFileReader.EndOfStream)
{
string line = logFileReader.ReadLine();
// Your code here
}
// Clean up
logFileReader.Close();
logFileStream.Close();
물고기는 제가 할게요.파일 공유 모드가 중요하므로 쓰기 공유를 허용해야 합니다.파일을 쓰는 프로세스가 이미 쓰기 액세스 권한을 얻었기 때문에 거부할 수 없습니다.StreamReader() 생성자는 FileShare를 사용합니다.읽고 다른 값을 사용하는 옵션이 없습니다.대신 StreamReader(Stream) 생성자를 사용하는 것이 실제로 해결 방법입니다.
그러나 이 공유 모드는 코드에도 영향을 미칩니다.다른 프로세스가 파일을 플러시할 때는 예측할 수 없습니다.마지막으로 읽은 행은 텍스트 행의 일부만 포함할 수 있습니다.파일 버퍼를 다시 플러시하면 나중에 나머지 줄이 표시됩니다.분명히 이것은 당신의 논리를 망칠 수 있습니다.
그것은 그것에 따라 다릅니다.FileShare
파일에 추가되는 다른 응용 프로그램에 의해 파일이 열린 모드입니다.다른 응용 프로그램이 파일을 열 때 다음을 지정했습니다.FileShare
다른 응용 프로그램이 파일에 액세스할 수 있는 모드입니다.이것.FileShare
모드는 읽기, 쓰기, 둘 다, 삭제, 모두 또는 없음일 수 있습니다.
동일하게 지정해야 합니다.FileShare
다른 응용 프로그램이 지정한 모드입니다.다른 응용 프로그램이 읽기만 허용하는 경우,FileShare.Read;
만약 그것이 읽기와 쓰기 둘다를 허용한다면, 사용합니다.FileShare.ReadWrite
.
StreamReader
사용만FileShare.Read
모드, 그래서 당신은 이미 그것이 올바른 것이 아니라고 가정할 수 있습니다.다음과 같이 ReadWrite를 시도합니다.
FileStream fs = new FileStream(FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader reader = new StreamReader(fs);
이미 열려 있는 파일에서 이 작업이 어떻게 수행될지는 확실하지 않지만 응용 프로그램이 이 파일을 잠글 수는 없습니다.
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/4400517/how-can-i-read-a-file-even-when-getting-an-in-use-by-another-process-exception
'source' 카테고리의 다른 글
ASP.NET의 세션 시간 초과 (0) | 2023.05.17 |
---|---|
MongoDB 및 C#: 대소문자 구분 안 함 검색 (0) | 2023.05.17 |
날짜 시간에서 하루 빼기 (0) | 2023.05.12 |
GitLab 원격: HTTP Basic:액세스 거부 및 치명적인 인증 (0) | 2023.05.12 |
Git에서 두 커밋 간에 변경된 줄 수를 계산하려면 어떻게 해야 합니까? (0) | 2023.05.12 |