可能重复:
打开流读取器时出错,因为文件被另一个进程使用
在 C# 中,我正在尝试构建一个程序,该程序将文本文件中列出的一定数量的文件或目录从一台计算机复制到同一网络上的另一台计算机(例如,从“\PC_OF_MARK”到“\PC_OF_SARAH”)但是,在打开和关闭 StreamReader 之后,我似乎被困在使用流写入器打开流。
在我能够复制任何东西之前,我需要能够用我的程序编辑“files.txt”的内容。
在我的表单上,我有 4 个按钮:添加、删除、关闭和复制。我还有一个 ListBox lbItems,其中包含“files.txt”中的行。
该程序位于 Delete 函数中:要从“files.txt”中删除一行,我读取 lbItems 的内容并将它们存储在 List 中。接下来,我删除列表中与 lbItems 中的选定项具有相同索引的字符串。最后,我想通过打开 StreamWriter(这是发生错误的地方)并用新列表覆盖“files.txt”来更新“files.txt”。
“files.txt”包含这两行:
"%UserProfile%\Documents\files.txt" & "%UserProfile%\Downloads\RubiksCube"
public partial class Form1 : Form
{
List<string> envKeys = new List<string>();
List<string> envValues = new List<string>();
public Form1()
{
InitializeComponent();
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
IDictionary ev = Environment.GetEnvironmentVariables();
foreach (DictionaryEntry de in ev)
{
envKeys.Add("%" + de.Key.ToString() + "%");
envValues.Add(de.Value.ToString());
}
syncList();
}
private void syncList()
{
StreamReader r = new StreamReader(@"C:\Users\Eigenaar\Documents\files.txt");
string line = r.ReadLine();
while (line != "")
{
lbItems.Items.Add(line);
line = r.ReadLine();
}
r.Close();
}
private void btnRemove_Click(object sender, EventArgs e)
{
if (lbItems.SelectedIndex != -1)
{
if (MessageBox.Show("Ben je zeker dat je " + lbItems.Items[lbItems.SelectedIndex] + " uit de lijst wil verwijderen?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.None) == DialogResult.Yes)
{
List<string> array = new List<string>();
using (StreamReader r = new StreamReader(@"C:\Users\Eigenaar\Documents\files.txt"))
{
string line = r.ReadLine();
while (line != null)
{
array.Add(line);
line = r.ReadLine();
}
string t = r.ReadToEnd();
}
array.RemoveAt(lbItems.SelectedIndex);
//Error occurs here:
using (StreamWriter w = new StreamWriter(@"C:\Users\Eigenaar\Documents\files.txt", false))
//The process cannot access the file 'C:\Users\Eigenaar\Documents\files.txt' because it is being used by another process.
{
foreach (string str in array)
{
w.WriteLine(str);
}
}
lbItems.Items.RemoveAt(lbItems.SelectedIndex);
}
}
}
}
如果有人知道我在说什么,请帮助!