2012-04-25 27 views
3

私はこのプロジェクトに取り組んでいますが、問題が発生しています。ここに私がする必要があるものがあります。 ファイルを保存ダイアログを使用せずにファイルを保存します

ユーザーが「保存」ボタンをクリックする

は、 に現在の内部値を切り捨て なしtxtFilePathで指定されたファイル(相対ではない絶対パスを)選択したレコードを書き込むと発生する例外を処理します。ここ

[OK]を私のコードです:

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を持って

:\ employessの\のemployeelist.txtは、私はそれにを保存したいここでの例です。 保存ボタンをクリックすると、そのemployeelistに行きますが、保存されているのは ではありません。

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

答えて

3

ダブルチェックするために、いくつかの事柄:

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

あなたはそれらのものをチェックしたら、あなたのプロジェクトの作成対追加要件については、この例でフォローしたいことがあります。それが存在しない場合、これは、ファイルが作成されます

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()); 
    } 
} 

を、またはそれがあれば追加してください。

+0

あなたは@shanが持っていない問題を解決しているように見えます。彼はファイルが既に存在する場合に追加する方法を尋ねなかった。彼のファイルは全く作成されておらず、それは問題です。 –

+0

@Shedal彼は実際にファイルに追加するように依頼しています... "現在内部の値を切り捨てることなく" – Rudu

+0

@Ruduしかし、それは彼が立ち往生している問題ではありません。それは彼が私たちに彼を助けてくれることではありません。 –

-1

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

  • テキストボックスにフルパスを入力すると、ファイルは適切な場所に保存されますか?もしそうなら、おそらくこれが意図されたものです。
  • ユーザーがフルパスを使用しない場合は、1つにする方法がありますか(たとえば、冒頭にC:\を付けるなど)。あるいは、完全なパスがないときには少なくとも知っていて、要求を拒否できますか?
+0

質問には、パスにはC:\ employess \ employeelist.txtというパスがあります。 –

+0

それはあなたがそれを保存することができますし、user.AndまでのEドライブに保存することができますそれは問題ではありませんし、絶対パスと相対パスではないと仮定しています。しかし、その道は、ユーザーが望んでいるものです。それがあなたにとって意味をなさないならば。 – shan

+0

C:\ employess \ employeelist.txtのパスがあります。 – shan

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(); 
} 

txtFilePathの種類はどのようなものとemployeeListを[更新]前者はそれがテキストボックスの示唆、後には、それが非にバインドされています示唆しますおそらくGUI要素ですか? (WAG)

あなたはまた、その上には、さらにあなたがそれで始まる

+1

Shanのコードで 'using'ディレクティブが使用されているため、FileStreamの' Dispose() 'メソッドが呼び出されます。ストリーム**は閉じられます。 –

0

(もちろん、ニーズに応じて)追記ではなく、一つの長いリストだった伝えることができます保存されますので、末尾に空白行を追加したい場合があります.NET Frameworkの4あなたはこのようにそれを行うことができます。もちろん

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

、あなたはおそらく有効なパスと文字列の有効な列挙を持っているために、チェックを追加したいと思います。

関連する問題