지금까지 나는 모든 것을 성공으로 시도했습니다.C# 잠긴 파일 읽기
내가 달성하려고하는 것은 특정 시간 동안 파일을 열어 잠그고 싶습니다. 파일을 열고 잠그는 직후, 읽기 전용으로 동일한 파일을 열려고합니다.
string filePath = "test.ini";
// Open and lock the file
FileStream configurationFile = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
configurationFile.Lock(1, configurationFile.Length);
// Open the same file just to read it
using (FileStream bufferStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(bufferStream))
{
string line;
while ((line = sr.ReadLine()) != null) // <--- Here I get the error
{
CustomMessageBox.Show(line);
}
}
}
실제로하여 FileStream과에서는 StreamReader를 사용하여 파일을 열 수 있지만, 그것은()는 파일이 다른 프로세스에 의해 사용중인 것을, 예외를 throw 예를 들어 sr.ReadLine과에서는 StreamReader를 사용하는 때.
여기에 언급 된대로 Reading a file used by another process [duplicate] FileShare 속성은 ReadWrite 여야하지만 이는 도움이되지 않습니다.
또한 StreamReader(bufferStream, Encoding.*)
과 같은 사용 가능한 모든 인코딩을 시도했지만 그 중 하나도 작동하지 않았습니다.
내가 간과하는 것이 있습니까?
[에 설명을'LockFile'] (https://msdn.microsoft.com/library/windows/desktop/aa365202)하는 관리 기능 랩 " 잠금 프로세스가 파일을 다시 열면 영역을 잠금 해제 할 때까지이 두 번째 핸들을 통해 지정된 영역에 액세스 할 수 없습니다. " 당신은 당신이하고 싶은 독서를 위해 첫 번째 스트림을 사용해야합니다. –
여전히 파일을 읽는 동안 쓰기를 위해 파일을 잠그고 싶습니다. 이 경우 https://stackoverflow.com/q/3279071/120955와 중복됩니까? – StriplingWarrior
어쨌든 전체 파일을 잠글 예정이므로 Lock을 사용하는 대신 FileShare.None으로 파일을 열면됩니다. – Evk