2013-11-20 15 views
0

Я пытаюсь создать файл и сохранить текст, но только созданный файл может спросить, в чем проблема?C# Создать txt-файл и сохранить

private void button2_Click(object sender, EventArgs e) 
    { 
     SaveFileDialog sfd = new SaveFileDialog(); 
     sfd.Filter = "Text File|*.txt"; 
     sfd.FileName = "Password"; 
     sfd.Title = "Save Text File"; 
     if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      string path = sfd.FileName; 
      StreamWriter bw = new StreamWriter(File.Create(path)); 
      bw.Write(randomstring); 
      bw.Dispose(); 
     } 
    } 
+0

Вы пытаетесь создать файл или добавить в файл, если он уже существует? – Habib

+2

Действительно ли 'randomstring' содержит текст? Если это «null», [ничего не написано] (http://msdn.microsoft.com/en-us/library/ce2kyyb4 (v = vs.110) .aspx). –

+0

Хабиб, я и создаю новую и заменяю аксивирующую. – Mik

ответ

2

Try и использовать File.WriteAllText вместо

if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    { 
     //... 
     File.WriteAllText(path, randomstring); 
    }  
+0

Интересная альтернатива. Никогда не пробовал это раньше. ([MSDN Link] (http://msdn.microsoft.com/en-us/library/ms143375 (v = vs.110) .aspx)) –

3

Вам необходимо позвонить bw.Close() перед вызовом bw.Dispose(). По API: «Вы должны позвонить Close, чтобы все данные были правильно записаны в базовый поток». (http://msdn.microsoft.com/en-us/library/system.io.streamwriter.close(v=vs.110).aspx)

Я бы на самом деле изменить код на:

using (StreamWriter bw = new StreamWriter(File.Create(path))) 
{ 
    bw.Write(randomstring); 
    bw.Close(); 
} 

using блок будет автоматически вызывать Dispose(), завершает ли не все успешно.

+0

Я не вижу причин для вызова close, поскольку Dispose равен закрыть –

+0

@SriramSakthivel это? –

+0

Рефлектор - ваш друг :) –

1
bw.Write(randomstring); 
bw.Dispose(); 

Вы пишете что-то, а затем полностью уничтожаете объект. Попробуйте:

bw.Write(randomstring); 
bw.Close(); 
bw.Dispose(); 
0

Per the documentation, вам нужно позвонить bw.Close(), прежде чем избавиться от него. Кроме того, вы должны использовать using, чтобы убедиться, что все IDisposable s правильно утилизированы.

if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    string path = sfd.FileName; 
    using (var fs = File.Create(path)) 
    using (StreamWriter bw = new StreamWriter(fs)) 
    { 
     bw.Write(randomstring); 
     bw.Close(); 
    } 
} 

Или просто использовать File.WriteAllText:

if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    string path = sfd.FileName; 
    File.WriteAllText(path, randomstring); 
} 
Смежные вопросы