[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
質問
以下は私のコードです。
public static TextWriter twLog = null;
private int fileNo = 1;
private string line = null;
TextReader tr = new StreamReader("file_no.txt");
TextWriter tw = new StreamWriter("file_no.txt");
line = tr.ReadLine();
if(line != null){
fileNo = int.Parse(line);
twLog = new StreamWriter("log_" + line + ".txt");
}else{
twLog = new StreamWriter("log_" + fileNo.toString() + ".txt");
}
System.IO.File.WriteAllText("file_no.txt",string.Empty);
tw.WriteLine((fileNo++).ToString());
tr.Close();
tw.Close();
twLog.Close();
このエラーを投げます。
IOException: Sharing violation on path C:\UsersWater Simulationfile_no.txt
私がやろうとしていることは、log_x.txtという名前のファイルを開き、file_no.txtファイルから"x"を取ることです。file_no.txtファイルが空の場合、ログファイルの名前をlog_1.txtとし、file_no txtへ "fileNo + 1" を書き込みます。新しいプログラムが始まると新しいログファイルの名前は log_2.txt でなければなりません。
解決方法を教えてください。
さて、あなたはファイルを開こうとしています。
file_no.txt
読み出し用
と
を別々のストリームで書き込みます。この場合、ファイルは読み込みストリームによってロックされるため、書き込みストリームを作成することができず、例外が発生するため、うまくいかない可能性があります。
一つの解決策は、まずファイルを読み、ストリームを閉じ、そして
fileNo
. そうすれば、ファイルは一度に一度しか開かれません。
もう一つの方法は、そのように読み取りと書き込みの両方のアクセス用にファイルストリームを作成することです。
FileStream fileStream = new FileStream(@"file_no.txt",
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None);
への回答が認められた。 この質問 は、共有リードを許可したくないと仮定しても、良い解決策を持っているようです。
可能な代替案
プログラム起動時に一意のログファイルを作成したいとのことですが、どのようにすればよいのでしょうか?他の方法としては、このようになります。
int logFileNo = 1;
string fileName = String.Format("log_{0}.txt", logFileNo);
while (File.Exists(fileName))
{
logFileNo++;
fileName = String.Format("log_{0}.txt", logFileNo);
}
これは、ログファイルが存在しないファイル番号を見つけるまで、番号を増やします。欠点は もしあなたが
log_1.txt
と
log_5.txt
になると、次のファイルは
log_6.txt
しかし
log_2.txt
.
この問題を解決するには、ディレクトリ内のすべてのファイルをマスクで列挙します。
log_*.txt
で、文字列操作を行って最大数を求めます。
可能性は無限大です :-D
関連
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] INIファイルの読み出し/書き込み
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
-
[解決済み] Javaでプレーンテキストファイルを読み込む
-
[解決済み] Pythonでリストをファイルに書き込む
-
[解決済み] バイナリファイルの読み込みと各バイトのループ処理
-
[解決済み] ファイル全体を読み込むと、ファイルハンドルが開いたままになりますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である