2016-11-24 5 views
4

デスクトップ上に作成されたtxtファイルを保存するにはどうすればよいですか?C#デスクトップ上にtxtファイルを保存する

これはコードです:

void CreaTxtBtnClick(object sender, EventArgs e){ 
    string filePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    filePath = filePath + @"\Error Log\"; 
    TextWriter sw = new StreamWriter(@"Gara.txt"); 

    int rowcount = dataGridView1.Rows.Count; 
    for(int i = 0; i < rowcount - 1; i++){ 
     sw.WriteLine(
      dataGridView1.Rows[i].Cells[0].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[1].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[2].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[3].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[4].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[5].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[6].Value.ToString() + '\t' + 
      dataGridView1.Rows[i].Cells[7].Value.ToString() + '\t' 
     ); 
    } 
    sw.Close(); 
    MessageBox.Show("File txt creato correttamente"); 
} 

私は、これらの命令

Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
filePath = filePath + @"\Error Log\"; 
TextWriter sw = new StreamWriter(@"Gara.txt"); 

と私は、デスクトップ上のファイルを保存することができますが、TXTは間違ったパスに正しく作成されていることを考えました。 どうすれば修正できますか?

+0

どこでそれを保存しましたか? – active92

+1

プログラムのフォルダ – Matteo

答えて

6

filePathを構築しましたが、TextWriterでは使用していません。代わりに、あなたは自分のアプリケーションがで起動フォルダにあり、デフォルトであるGara.txtファイルに書いている

ような何かにあなたのコードを変更し

:すべてのパスのパーツを組み合わせにあなたが持っている

filePath = filePath [email protected]"\Error Log\Gara.txt"; 
TextWriter sw= new StreamWriter(filePath); 
+4

ファイルパスを構築するには、文字列連結の代わりに 'Path.Combine()'を使用することが望ましいことに注意してください。 –

+1

また、デフォルトは、アプリケーションが起動されたディレクトリであり、実行可能ファイルが置かれているディレクトリではありません。例えば。あなたが現在ディレクトリ 'C:\ tmp'にいて、あなたが' C:\ Program Files \ SomeFolder \ MyApp.exe'であなたのアプリケーションを起動した場合、現在のディレクトリは 'C:\ tmp'になります。 appやプロセスを開始する際のパラメータ、例えば 'start'コマンドを使用して)。 –

+0

@DirkVollmarはそれを逃した、ありがとう。 –

3

最終filePathへ:

string filePath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
    "Error Log", 
    "Gara.txt"); 

私は読みやすく、およびeでデータを保存するためにLINQのを使用することをお勧め維持するasier:

File 
    .WriteAllLines(filePath, dataGridView1 
    .Rows 
    .OfType<DataGridViewRow>() 
    .Select(row => string.Join("\t", row 
     .Cells 
     .OfType<DataGridViewCell>() 
     .Take(8) // if grid has more than 8 columns (and you want to take 8 first only) 
     .Select(cell => cell.Value)) + "\t")); // + "\t": if you want trailing '\t' 
+0

各行の最後に最後の ''\ t'がありません。 – Maarten

+0

@Maarten:ありがとう、ありがとう!しかし、末尾の集計*が実際には冗長であることがよくあります(私はコメントを追加しました) –

+0

末尾の '\ t'は実際には私のバグのように見えますが(もちろん、そのような奇妙なことが実際に必要とされるかもしれません)。それにもかかわらず、このソリューションでは、文字列ビルダーを使用することで、文字列の連結を避けることができます(行を構築せずに直接ストリームに書き込む方が効率的です)。 –

関連する問題