3

私はまだこのプロジェクトに取り組んでおり、問題が発生しています。さてここに私がする必要があることです。

ユーザーが[保存]ボタンをクリックすると、現在内部にある値を切り捨てずに、txtFilePathで指定されたファイル(相対パスではない絶対パス)に選択したレコードを書き込み、発生した例外を処理します。

これが私のコードです:

 private void Save_Click(object sender, EventArgs e)
    {

        string filePath = txtFilePath.Text;

        if (!File.Exists(filePath))
        {
            FileStream fs = File.Create(filePath);
            fs.Close();
        }

        using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
        {
            using (StreamWriter sw = new StreamWriter(fs))
            {
                foreach (string line in employeeList.Items)
                {
                    sw.WriteLine(line);
                }
            }
        }
            }

プログラムに移動して、employeelist.textから、保存している場所に保存されていないものを保存したい場合。コードに何かが欠けているのかどうかはわかりませんが、保存されません。次に例を示します。

このリストのemployeelistに個人名を追加し、テキストボックスにC:\ employee\employeelist.txtというファイルを保存します。[保存]ボタンをクリックしてから、その従業員リストに移動しましたが、保存されていません。

何が間違っているのかわかりません。オンラインで解決策を探していましたが、まだ何も見つかりませんでした。ありがとう

4

4 に答える 4

3

再確認するいくつかの事柄:

  • テストするときは、employeelist.txtファイルを開いていないことを確認してください
  • ファイル名に無効な文字が含まれていないことを確認してください
  • アプリケーションに、指定した場所にファイルを保存する権限があることを確認してください
  • デバッガーを使用してコードをステップスルーし、飲み込まれた例外を探します。ファイルが作成されない理由があるはずです
  • イベントがボタンに接続されていることを確認してSave_Clickください。例のコードは実行されていますか?

これらを確認したら、プロジェクトの作成と追加の要件について、次の例に従うことをお勧めします。

string path = txtFilePath.Text;

// This text is added only once to the file.
if (!File.Exists(path)) 
{
    using (StreamWriter sw = File.CreateText(path)) 
    {
        foreach (var line in employeeList.Items)
            sw.WriteLine(line.ToString());
    }   
} 
else 
{
    using (StreamWriter sw = File.AppendText(path)) 
    {
        foreach (var line in employeeList.Items)
            sw.WriteLine(line.ToString());
    }
}

これにより、ファイルが存在しない場合はファイルが作成され、存在する場合はファイルに追加されます。

于 2012-04-25T19:42:09.120 に答える
1

ファイルが存在することを確認してから作成することは、StreamWriter/FileStream パーツによってすべて処理できるため、少し不要です。したがって、上記の関数は次のように簡略化できます。

public void Save_Click(object sender, EventArgs e)
{
    StreamWriter file = 
      new StreamWriter(txtFilePath.Text, true);//Open and append
    foreach (object item in employeeList.Items) {
       file.WriteLine(item.toString());
    }
    file.Close();
}

[更新しました]

タイプは何ですか。前者はそれがテキスト ボックスであることを示唆していますが、後者はおそらく非 GUI 要素にバインドされていることを示唆していますかtxtFilePath? employeeList(ワグ)

最後に空白行を追加して、さらに保存するときに、1 つの長いリストではなく追加であることがわかるようにすることもできます (もちろん、必要に応じて)。

于 2012-04-25T19:47:04.247 に答える
0

.Net Framework 4 以降では、次のように実行できます。

private void Save_Click(object sender, EventArgs e)
{
        File.AppendAllLines(txtFilePath.Text, employeeList.Items);
}

もちろん、有効なパスと文字列の有効な列挙を取得するためのチェックを追加することをお勧めします。

于 2012-09-25T22:44:16.153 に答える
-1

パスが相対パスのように見える場合(つまり、ドライブ文字で始まらない場合)、そのように解釈されます。

  • テキストボックスにフルパスを入力すると、ファイルは適切な場所に保存されますか?もしそうなら、おそらくこれは意図されたものです。
  • ユーザーがフルパスを入力しない場合、フルパスにする方法はありますか(たとえば、最初にC:\を貼り付けるだけです)。または、少なくともフルパスがないことを確認して、リクエストを拒否できますか?
于 2012-04-25T19:32:33.660 に答える