XMLファイル(old.xml)を開き、無効な文字をフィルターに掛け、別のXMLファイル(abc.xml)に書き込むコードです。最後にXML(abc.xml)を再度ロードします。 followlingラインを実行すると、例外がありxmlファイルが別のプロセスによって使用されていると言い、私のコードでどこがリークですか?
xDoc.Load("C:\\abc.xml");
は、誰もが何が間違っている任意のアイデアを持っていますか?私のコードに漏れがあり、なぜ(私は常に「キーワード」を使用していますが、漏れを見るのが混乱しています...)?
私のコード全体は、Windows Vista x64でC#+ VSTS 2008を使用しています。
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
Encoding encoding = Encoding.GetEncoding("utf-8", new EncoderReplacementFallback(String.Empty), new DecoderReplacementFallback(String.Empty));
using (TextWriter writer = new StreamWriter(new FileStream("C:\\abc.xml", FileMode.Create), Encoding.UTF8))
{
using (StreamReader sr = new StreamReader(
"C:\\old.xml",
encoding
))
{
int bufferSize = 10 * 1024 * 1024; //could be anything
char[] buffer = new char[bufferSize];
// Read from the file until the end of the file is reached.
int actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
while (actualsize > 0)
{
actualsize = sr.Read(buffer, 0, bufferSize);
writer.Write(buffer, 0, actualsize);
}
}
}
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("C:\\abc.xml");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
EDIT1:バッファサイズを10Mから1Mに変更しようとしましたが、動作します。私はとても混乱しています、どんなアイデアですか?
EDIT2:入力した古いXMLファイルが100Mなどの非常に大きい場合、この問題は再現が非常に簡単です。私はそれが.NETの既知のバグかどうか疑問に思っています。 ProcessExplorer/ProcessMonitorのようなツールを使用して、どのプロセスがXmlDocument.Loadによってアクセスされないようにファイルをロックするかを確認します。
なぜこのような大きなバッファーですか? (それは問題に関係してはいけませんが、10Mbの理由を知ることは興味深いでしょう...)。私はおそらく10kを使用するかもしれません... –
私は10Mから1Mにバッファのサイズを変更しようとしているし、それは動作します!私はとても混乱しています、どんなアイデアですか? – George2
私はオリジナルのコードで大きなバッファサイズを使用するのは、純粋にテスト目的のためであり、意図的に設定されていない特別な値です。 – George2