1

私は、やるべきこと、優先度などを表示する小さなプログラムを書いています。このプログラムには、2 つのタブがあります。タブ 1 は新しいやるべきことを作成するためのもので、もう 1 つのタブは現在のやるべきことを表示するためのものです。したがって、タブ1のテキストボックスにテキストを入力し、[保存]ボタンをクリックすると、タブ2のコンボボックスに保存されます。そして、プログラムを再起動しても、まだ保存されているはずです。ファイルに保存できるように、ファイルでこれを行うようにGoogleに指示されました。そして、プログラム用に調整した短いコードを見つけました。ここで私のコードを見ることができます:

private void Form1_Load(object sender, EventArgs e)
{
    // Check if directory exists
    if (Directory.Exists(@"C:\Users\rs\Desktop\Test\)"))
    {
        // Do nothing
    }

    else
    {
        Directory.CreateDirectory(@"C:\Users\rs\Desktop\Test\");
    }

    if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
    {
        // Do nothing
    }

    else
    {
        File.Create(@"C:\Users\rs\Desktop\Test\test.txt");
    }

    StreamReader sr = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt");
    while (sr.Peek() >= 0)
    {
        combox_Name2.Items.Add(sr.ReadLine());
    }
    sr.Close();
}

private void btn_Save_Click(object sender, EventArgs e)
{

    StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true);

    try
    {
        Process.Start(combox_Name2.Text, txt_Name.Text);

        if (combox_Name2.Items.Contains(txt_Name.Text))
        {
            // Do nothing
        }

        else
        {
            writer.WriteLine(combox_Name2.Text);
            writer.Flush();
            writer.Dispose();
            combox_Name2.Items.Add(txt_Name.Text);
        }
    }

    catch
    {
        MessageBox.Show("The file '" + txt_Name.Text + "' could not be located", "File could not be located");
    }
}

そして、私の問題は次のとおりです。プログラムを起動し、テキストボックスにテキストを入力して保存ボタンをクリックするたびに、オンラインでエラーが発生します

StreamReader sr = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt");

C:\Users\rs\Desktop\Test\test.txtVS2012 は、別のプロセスで既に開始されているため、プロセスを開始できないと言っています。

誰かが私にヒントを与えることができますか?

乾杯

4

4 に答える 4

2

次のコードはあなたの目的を達成します。機能する場合は、回答としてマークしてください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace FileHandling
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Check if directory exists
        if (Directory.Exists(@"C:\Users\rs\Desktop\Test\)"))
        {
            // Do nothing
        }

        else
        {
            Directory.CreateDirectory(@"C:\Users\rs\Desktop\Test\");
        }

        if (File.Exists(@"C:\Users\rs\Desktop\Test\test.txt"))
        {
            // Do nothing
        }

        else
        {
            File.Create(@"C:\Users\rs\Desktop\Test\test.txt");
        }

        using (StreamReader writer = new StreamReader(@"C:\Users\rs\Desktop\Test\test.txt"))
        {
            while (writer.Peek() >= 0)
            {
                combox_Name2.Items.Add(writer.ReadLine());
            }
            writer.Close();
        }

    }

    private void btn_Save_Click(object sender, EventArgs e)
    {
        using (StreamWriter writer = new StreamWriter(@"C:\Users\rs\Desktop\Test\test.txt", true))
        {
            try
            {
                if (combox_Name2.Items.Contains(txt_Name.Text))
                {
                    MessageBox.Show("The task '" + txt_Name.Text + "' already exist in list", "Task already exists");
                }

                else
                {
                    combox_Name2.Items.Add(txt_Name.Text);
                    writer.WriteLine(txt_Name.Text);
                    writer.Flush();
                    writer.Dispose();
                }
            }

            catch
            {
                MessageBox.Show("The file '" + txt_Name.Text + "' could not be located", "File could not be located");
            }

        }
    }
}
}
于 2013-08-30T12:36:48.213 に答える
1

IDisposable インターフェイスを実装するオブジェクトを常に配置する

using(IDisposable object goes here)
{
    // Do something.
}

あなたの場合、 StreamWriter オブジェクト。

于 2013-08-30T12:23:48.447 に答える