C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
C# と VB.NET の入門サイト
Re[2]: ファイルをロックしてから上書き
(過去ログ 143 を表示中)
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法/規約
トピック表示
ランキング
記事検索
過去ログ
[トピック内 4 記事 (1 - 4 表示)] <<
0
>>
■83899
/ inTopicNo.1)
ファイルをロックしてから上書き
▼
■
□投稿者/ az
(1回)-(2017/04/21(Fri) 10:57:57)
分類:[C#]
実現したい事は処理の前にファイルをロックし
処理後に文字列を書き込む(上書き)ということをしたいのですが
以下のコードだと追記になってしまいます。
上書きモードすることはできないでしょうか。
よろしくお願いします。
メソッド1
_FileStreamはインスタンス変数です。
_FileStream = new System.IO.FileStream(
_FilePath,
System.IO.FileMode.Open,
System.IO.FileAccess.ReadWrite,
FileShare.None);
メソッド2
StreamWriter sw = new StreamWriter(_FileStream);
sw.Write("書き込みたい文字列"); // 元のファイルに存在する行を削除、追加
sw.Flush();
引用返信
編集キー/
編集
■83901
/ inTopicNo.2)
Re[1]: ファイルをロックしてから上書き
▲
▼
■
□投稿者/ Hongliang
(529回)-(2017/04/21(Fri) 11:07:18)
StreamWriterをnewする直前に、_FileStream.SetLength(0)すればいいんでは。
一行だけ消す、となるとちょっと複雑ですが。
引用返信
編集キー/
編集
■83902
/ inTopicNo.3)
Re[1]: ファイルをロックしてから上書き
▲
▼
■
□投稿者/ 魔界の仮面弁士
(1267回)-(2017/04/21(Fri) 11:20:41)
■
No83899
(az さん) に返信
> _FileStream = new System.IO.FileStream(
> _FilePath,
> System.IO.FileMode.Open,
> System.IO.FileAccess.ReadWrite,
> FileShare.None);
最後の引数だけ、"System.IO." が省略されているのが非対称的で気になりましたが、それはさておき。
> 以下のコードだと追記になってしまいます。
FileMode.Append + FileAccess.Write なら追記になりますが、
FileMode.Open + FileAccess.ReadWrite なら
現在の位置からの上書きになるはずなんですけれどね…。
出力を始める前に _FileStream.Position の値を
確認してみてください。上書きしたい位置ではなく、
ファイルの末尾を指していたりはしませんか?
(たとえば、StreamReader.ReadToEnd を事前に呼び出していたりすると、
Position がファイル末尾に移動することになります)
引用返信
編集キー/
編集
■83910
/ inTopicNo.4)
Re[2]: ファイルをロックしてから上書き
▲
▼
■
□投稿者/ az
(2回)-(2017/04/21(Fri) 13:47:27)
ご回答ありがとうございます。
書き込み前にReadToEndを呼び出しているのが原因のようです。
ありがとうございました。
解決済み
引用返信
編集キー/
編集
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
管理者用
-
Child Tree
-