2016-11-24 6 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' (если он не изменен вашим приложение или параметр при запуске процесса, например, с помощью команды 'start'). –

+0

@ DirkVollmar пропустил его, спасибо. –

3

Вы должны объединить все части пути в конечном filePath:

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

Я предлагаю использовать 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' выглядит как ошибка для меня, на самом деле (но, конечно, мы не делаем знать точную спецификацию формата файла. Может быть, такая странность действительно требуется). Тем не менее, это решение элегантно избегает множества конкатенаций строк, используя построитель строк (выписывание непосредственно в поток без создания строки может быть еще более эффективным). –

Смежные вопросы