所以我一直試圖用不同的方法修復這個bug,並且沒有任何東西可以工作。這是我簡化了我的代碼,所以我可以看到發生了什麼問題。用一種方法打開文件,然後在另一個文件中寫入
我打電話open()
方法首先打開文件,將它讀出我的變量。然後我調用save()
並寫回到同一個文件。
然而,我得到一個錯誤說
,因爲它正被另一個進程使用
是否有一個解決方案的進程無法訪問文件{$ FILE}?
private void save()
{
if (currentFile == null)
{
saveAs();
}
else
{
if (File.OpenWrite(currentFile) != null)
{
byte[] buffer = null;
if (currentEncoding == encoding.utf8)
{
buffer = System.Text.Encoding.UTF8.GetBytes(mainTxtBx.Text);
}
else
{
buffer = System.Text.Encoding.ASCII.GetBytes(mainTxtBx.Text);
}
File.WriteAllBytes(currentFile, buffer);
}
}
}
private void open()
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = homePath;
openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.FilterIndex = 2;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
currentFile = openFileDialog.FileName.ToString();
openFileDialog.Dispose();
if (File.Exists(currentFile))
{
byte[] buffer = File.ReadAllBytes(currentFile);
if (currentEncoding == encoding.utf8)
{
mainTxtBx.Text = new string(System.Text.Encoding.UTF8.GetChars(buffer).ToArray());
}
else
{
mainTxtBx.Text = new string(System.Text.Encoding.ASCII.GetChars(buffer).ToArray());
}
}
}
}
什麼時候關閉由File.OpenWrite創建的流? –
@Paul從他的代碼,永遠不會因爲沒有引用該對象,所以它不可能關閉(除非GC開始調用終結器,我相信它被關閉,但不應該依賴 – Davy8