web-dev-qa-db-ja.com

Txt-Fileを作成して書き込む

テキストファイルを作成し、それにTextBoxのテキストを追加します。テキストファイルの作成は、次のコードで問題なく機能します。

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    File.Create(path);
}

しかし、テキストファイルにテキストを追加しようとすると、ファイルが使用されているというエラーが表示されます。コードを実行する前にファイルが既に存在する場合、このエラーは発生せず、TextBox.Textがファイルに追加されます。次のコードを使用して、テキストファイルにテキストを追加します。

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    if (File.Exists(path))
    {
        using (var tw = new StreamWriter(path, true))
        {
            tw.WriteLine(TextBox1.Text);
            tw.Close();
        }
    }
}

手伝って頂けますか?

4
Morris

ファイルが存在する場合は、上書きまたは追加できます。ファイルが存在しない場合、このコンストラクターは新しいファイルを作成します。したがって、ファイルが存在するかどうかを確認する必要はありません。

変更する前に、ファイルが閉じていることを確認する必要があります。

0
jerry

ここで を見るとわかるように、StreamWriter は、指定されたパスにファイルが存在しない場合、実際にはファイルを作成するので、それをチェックしても意味がありません。

ファイルを作成している部分を削除して、単に書き込みを開始することをお勧めします:

_public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    using (var tw = new StreamWriter(path, true))
    {
        tw.WriteLine(TextBox1.Text);
        tw.Close();
    }
}
_

ただし、事前にファイルを本当に作成したい場合は、_File.Create_呼び出しによって作成された DisposeFileStreamオブジェクトを忘れないでください。 Dispose を呼び出すと、自動的にFlushCloseが呼び出されるので、安全であり、次のようなさまざまな方法でこれを実行できます。この :

_InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    using ( File.Create(path) ) ; // This will generate warnings that you're not using the object and so on, but that's okay,
}
_

またはこのように:

_InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    FileStream fs = File.Create(path);
    fs.Dispose();
}
_
0
Mateusz