아래에서 볼 수 있듯이 Parallel.For 루프가 있습니다. 파일이 존재하지 않을 때 프로그램을 실행하면 "다른 프로세스에서 사용 중이기 때문에 'C : \ ShowTime Error Logs \ logFile.txt'파일에 액세스 할 수 없습니다."와 같은 오류가 발생합니다.어떻게 "다른 프로세스에서 파일을 사용하고 있기 때문에 프로세스가 파일에 액세스 할 수 없습니다."오류
그러나 파일이 존재하면 오류가 없습니다. 혼란 스럽네요, 내 코드는 파일이 존재하지 않더라도 이미 파일을 만듭니다. 왜 프로그램을 실행하기 전에 파일이 존재하지 않으면 오류가 발생합니다. 어떻게 해결할 수 있습니까?
들으
ErrorLog el = new ErrorLog();
Parallel.For(0, 100000, delegate(int i)
{
el.WriteToShowTimeLog("logFile", "", "", (i).ToString(), "", "", @"C:\");
});
오류 로그 클래스는, 그렇지 않으면 당신은 동시에 두 개의 별도의 스레드에서 그것을 만들 수 있습니다, 당신은 잠금에서 확인 및 작성 파일을 포함 할 필요가
private static readonly object lock_ = new object();
public void WriteToShowTimeLog(string fileName, string errorMessage, string description, string movieID, string theaterID, string showTimeDate, string folderPath)
{
string filePath = folderPath + @"\ShowTime Error Logs\" + fileName + ".txt";
lock (lock_)
{
if (!Directory.Exists(folderPath + @"\ShowTime Error Logs"))
{
Directory.CreateDirectory(folderPath + @"\ShowTime Error Logs");
}
if (!File.Exists(filePath))
{
File.Create(filePath);
}
using (StreamWriter dosya = new StreamWriter(filePath,true))
{
dosya.WriteLine("TheaterID: " + theaterID);
dosya.WriteLine("MovieID: " + movieID);
dosya.WriteLine("Show Time Date: " + showTimeDate);
dosya.WriteLine("Hata Mesajı: " + errorMessage);
dosya.WriteLine("Açıklama: " + description);
dosya.WriteLine("Hata Alınan Zaman:" + DateTime.Now);
dosya.WriteLine("-------------------------------------------------------------------------------------------------------");
dosya.Close();
}
}
}
시도했지만 결과가 동일합니다, 나는 또한 검사 및 생성 파일을 병렬 루프 전에 전에 시도했다. – Bilgehan
@Bilgehan : 무엇이 잘못되었는지를 알 수 있도록 수정 된 코드를 보여줍니다. –
코드를 편집했습니다. 감사합니다 – Bilgehan