アプリ版:「スタンプのみでお礼する」機能のリリースについて

System.IO.StreamReader reader = new System.IO.StreamReader(Filename1, System.Text.Encoding.GetEncoding("utf-8"));
// データセットにXMLファイルを読み込む
dtSet.ReadXml(reader);
...
...
で読込んでいる(内容の変更はしない)ファイルを別Formで別のデータに変更したいのですが、何か方法がありませんか(読み込んだファイルの開放とか)?
File.Copy(FileName2,FileName1, true);
と出来たら一番簡単なのですが、使用中ですのようなエラーが出ます。

A 回答 (1件)

読込終わった段階でClose()すればいいだけでは。


ただし、当たり前ですが、別プロセスからの書込みも許可されるようになります。
別プロセスとは、あらゆる外部プログラムを含みます。
そのため、要件によっては、正しいアプローチとは言えないかもしれません。

同一プロセス内での書込みを許可し、更には別プロセスでの読込/書込の許可制御をしたいならば、System.IO.FileStreamを併用すべきでしょう。

// 外部からの読込/書込を許可せずD:\hoge.xmlの読み書きを行う
using (var fs = new System.IO.FileStream(@"D:\hoge.xml",
System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None))
{
// 読み込み
using (var sr = new System.IO.StreamReader(fs, Encoding.UTF8))
{
var dt = new DataSet();
var xml = dt.ReadXml(sr);

// 上書き書き込み
//fs.SetLength(0);
//using (var sw = new System.IO.StreamWriter(fs, Encoding.UTF8))
//{
// sw.Write("test");
//}

// コピー元のファイルがあって上書きしたいなら
using (var copyFs = new System.IO.FileStream(@"D:\hoge2.xml",
System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.None))
{
fs.SetLength(0);
copyFs.CopyTo(fs);
}
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
reader.Close();
で、うまくいきました。

>ただし、当たり前ですが、別プロセスからの書込みも許可されるようになります。
>別プロセスとは、あらゆる外部プログラムを含みます。
>そのため、要件によっては、正しいアプローチとは言えないかもしれません。
とりあえず、そこまでは必要ありませんが、今後のプログラムで参考にさせていただきます。

お礼日時:2016/03/22 14:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!