텍스트 파일에 쓰는 코드가 있습니다. 이 파일에 기록하도록되어있는 유일한 과정을 활성화하고, 다음에 방법이File.AppendAllText 다음에 파일이 계속 열려 있습니다.
try
{
File.AppendAllText(path, '\n' + tmp);
}
catch (Exception)
{
lblError.Text = "Unable to save file";
}
이 잘 시간의 절반처럼 작동합니다. 그러나 때로는 파일이 다른 프로세스에서 사용되고 있다는 예외를 throw합니다. 어떤 프로세스가 파일을 사용했는지 조회했습니다. 그 파일은 w3wp.exe
입니다. 나는 그것이 완료되면 파일을 닫습니다 File.AppendAllText
읽었습니다, 그래서 그것을 해본 것처럼 잘되어야합니다. 권리?
편집 : 목적의
설명 요청, 그래서 여기에 표시됩니다. 코드의이 부분은 다른 프로세스가 사용할 구성 텍스트 파일에 한 줄을 추가해야합니다. 그 프로세스가 현재 실행되고 있지 않다는 것을 100 % 확신합니다.
또한이 코드는 asp.net 응용 프로그램 (코드 숨김)이라는 것을 추가 할 수도 있습니다. 따라서 사용자는 ASP 페이지에서 config.txt에 쓸 수 있습니다.
static readonly object saveLock = new object();
/*
* stuff
*/
protected void saveToConfig(string input)
{
lock(saveLock)
{
File.AppendAllText(path, '\n' + input);
}
}
을하지만 난 여전히 여러 프로세스가 파일에 액세스하려고하는 것을 말하는 IOException이 오류를 얻을 :
나는 이것을 시도했습니다.
당신이'대로를 나는 당신이 (다중 스레드 환경에서 IIS에 여러 요청 추측 w3wp.exe') => 두 개의 스레드가 병렬로 파일에 액세스하고 있습니까? – ChrFin
그럴 것 같습니다. 코드의 대부분이 내 작업이 아니기 때문에 나는 실제로 확신 할 수 없다. ^^. 그렇다면 단순한 자물쇠 만 있으면 충분할까요? –
예, 자물쇠가 도움이 될 것입니다,하지만 기본 디자인 결함이 있다고 생각합니다 ... – ChrFin