2

私は、ファイルを開き、その内容を変更してから、ファイルに書き戻すための最も合理的な方法を見つけようとしています。

次の「MyFile.xml」がある場合

<?xml version="1.0" encoding="utf-8"?>
<node>
  <data>this is my data which is long</data>
</node>

そして、これに従ってそれを変更したい:

private static void Main(string[] args)
{
    using (FileStream stream = new FileStream("Myfile.xml", FileMode.Open))
    {
        XDocument doc = XDocument.Load(stream);
        doc.Descendants("data").First().Value = "less data";
        stream.Position = 0;
        doc.Save(stream);
    }
}

次の結果が得られます。ファイルの合計の長さが以前よりも短いため、最後に誤ったデータを取得することに注意してください。

<?xml version="1.0" encoding="utf-8"?>
<node>
  <data>less data</data>
</node>/node>

私は使用できるFile.ReadAll*と思いますFile.WriteAll*が、それは2つのファイルを開くことを意味します。ファイルを閉じて再度開かずに、「このファイルを開いてデータを読み取り、保存時に古いコンテンツを削除したい」と言う方法はありませんか?私が見つけた他の解決策にはが含まれますFileMode.Truncateが、それは私がコンテンツを読むことができないことを意味します。

4

2 に答える 2

3

次のようにFileStream.SetLengthを使用する必要があります。

stream.SetLength(stream.Position);

書き終えたら。
もちろん、その位置が書き込まれたデータの最後にあると仮定します。

于 2013-03-25T10:22:24.657 に答える
2

なぜ最初にファイルをファイルストリームに読み込むのですか?

次のことができます。

private static void Main(string[] args]
{
   string path = "MyFile.xml";
   XDocument doc = XDocument.Load(path);
   // Check if the root-Node is not null and other validation-stuff
   doc.Descendants("data").First().Value = "less data";
   doc.Save(path);
}

ストリームの問題は、読み取りまたは書き込みのいずれかができることです。

.net-Framework 4.5を使用すると、ストリームの読み取りと書き込みも可能であると読みましたが、まだ試していません。

于 2013-03-25T10:23:09.743 に答える