C# で、テキスト ファイルにリストされている一定量のファイルまたはディレクトリを、あるコンピューターから同じネットワーク上の別のコンピューターにコピーするプログラムを構築しようとしています (例: "\PC_OF_MARK" から "\PC_OF_SARAH" へ)。 StreamReader を開いたり閉じたりした後、ストリームライターでストリームを開くことに固執しているようです。
何かをコピーする前に、自分のプログラムで「files.txt」の内容を編集できる必要があります。
私のフォームには、追加、削除、閉じる、コピーの 4 つのボタンがあります。「files.txt」の行を含む ListBox lbItems もあります。
プログラムは Delete 関数にあります。「files.txt」から 1 行を削除するには、lbItems の内容を読み取り、List に保存します。次に、lbItems で選択した項目と同じインデックスを持つリスト内の文字列を削除します。最後に、StreamWriter を開き (ここでエラーが発生します)、「files.txt」を新しいリストで上書きして、「files.txt」を更新します。
「files.txt」には次の 2 行が含まれます。
"%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);
}
}
}
}
私が何を言っているのか知っている人がいたら、助けてください!