2017-08-04 14 views
0

プロセスが別のプロセスで使用されているため、 'ファイルパス'ファイルにアクセスできません。File.AppendAllText()を使用した後に別のプロセスが使用しているファイル

私が発見したこれら2質問

File being used by another process after using File.Create()

Does File.AppendAllText close the file after the operation

これは私が持っているとしていますすべての要求となった結果を保存する必要があるAPIアウト、 複数のリクエストがある可能性があります。 マイコード

public static void SaveTheRequestAndResponse(string type, SearchRequest searchRequest = null, dynamic result = null) 
{ 
    var FilePath = AppDomain.CurrentDomain.BaseDirectory + @"SearchRequest"; 
    bool exists = Directory.Exists(FilePath); 
    if (!exists) 
    { 
     var stream = Directory.CreateDirectory(FilePath); 
    } 
    if (type == "request") 
    { 

     string Space = ", "; 
     StringBuilder request = new StringBuilder(); 

     request.Append("Search Id : " + searchRequest.ID); 
     request.Append(Space + "Company Name : " + searchRequest.CompanyName); 
     request.Append(Space + "Country Code : " + searchRequest.CountryCode); 

     request.Append(Space + "Search Type : " + searchRequest.SeacrhType); 

     request.Append(Space + "Request Time : " + DateTime.Now + Environment.NewLine); 

     var DataToBeSave = request.ToString(); 

     System.IO.File.AppendAllText(FilePath + @"\" + "FileNAme" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt", DataToBeSave + Environment.NewLine); 

    } 
    else 
    { 
     string Space = ", "; 
     StringBuilder SearchResult = new StringBuilder(); 
     SearchResult.Append("The result for Request" + Space); 
     SearchResult.Append("Search Id : " + searchRequest.ID + Space); 
     SearchResult.Append("States Code : " + result.StatusCode + Space); 
     SearchResult.Append("Result Time : " + DateTime.Now + Environment.NewLine); 

     var DataToBeSave = SearchResult.ToString(); 
     System.IO.File.AppendAllText(FilePath + @"\" + "FileNAme" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt", DataToBeSave + Environment.NewLine); 

    } 
} 

私の理解は、私はこのエラーが出るん

+1

Webリクエストごとにファイルに書き込むときに発生する競合状態を処理する必要があります。 2つの要求が多かれ少なかれ同時に発生すると、両方の要求が同時にファイルに書き込もうとします。 – abydal

+0

Dirが存在するかどうかを確認する必要はありません。 Directory.CreateDirectoryは、既存のディレクトリを返すか、新しいパスを作成します(パスが有効な場合) –

+0

どこからこの関数を呼び出していますか? – martennis

答えて

1

私のコードは、競合状態を持っており、APIがより多くて電話をされているため、これはなぜFile.AppendAllTextはとても操作した後に閉鎖するということです各所定の時間に一人のユーザーは、さえ

System.IO.File.AppendAllText(FilePath + @"\" + "FileNAme" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt", DataToBeSave + Environment.NewLine); 

が操作した後、閉鎖すること、それはまだ時間が必要に作業を行うと、唯一の接続は、それぞれで開くことができるのスレッドがロックする必要があるので、時間とその缶を与えます行われること

private static Object thisLock = new Object(); 
lock (thisLock) 
{ 
    System.IO.File.AppendAllText(FilePath + @"\" + "DandB" + DateTime.Now.ToString("dd-MM-yyyy") + ".txt", DataToBeSave + Environment.NewLine); 
} 

ありがとうAbydal

関連する問題