2016-05-06 6 views
0

テキストボックスのテキストをtxtファイルに保存するメソッドがありますが、SaveFileDialogを終了するたびにSystem.IO.IOExceptionエラーが発生します。C# - System.IO.IOException

Visual Studioでは、「File.WriteAllLines」で始まるコードが強調表示され、エラーが表示されます。ありがとう。

正確なエラーメッセージ:

型 'System.IO.IOException' の未処理の例外がmscorlib.dll

で発生しました追加情報:\ Users \ユーザーktfjulien \:プロセスはファイル」CにアクセスすることはできませんDocuments \ poop.txt 'は別のプロセスで使用されているためです。

EDIT: ありがとうございます。エラーメッセージは表示されなくなりましたが、テキストが新しい行で区切られているかどうかにかかわらず、テキストボックスに保存されたものはすべて1行に書き込まれます。

+0

エラーメッセージが表示されますか? –

答えて

3

File.Create(cp);をファイルに書き込む必要はありません。これがエラーの原因です。代わりに、直接実行します。

cp = sfd.FileName; 
FileStream fs = File.OpenWrite(cp); 

そして、あなたはStreamWriterの代わりFileStreamを使用したい場合は、あなたが直接あなたとFile.WriteAllLinesを使用することができ、あなたのStreamWriter

StreamWriter sw = new StreamWriter(fs); 

か、の入力としてFileStreamを使用表示 - 使用しないでくださいFile.Create

if (sfd.ShowDialog() == DialogResult.OK) { 
    cp = sfd.FileName; 
    //File.Create(cp); //remove this 

    File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); 

} 
1

ファイルを作成するときあなたがする必要がないFile.Create()を使用して、このファイルが既にFile.Create()で使用されますが、ファイルクローズファイルにテキストを書き込む前にして、使用する前に別の場所にそのファイルを閉じる必要は作家が

var file = File.Create(cp); 
file.Close(); 

完全な作業溶液

static OpenFileDialog ofd = new OpenFileDialog(); 
static SaveFileDialog sfd = new SaveFileDialog(); 
static String cp; 
private void SaveClass() 
{ 
    sfd.DefaultExt = "txt"; 
    sfd.Filter = "Text Files | *.txt"; 
    if (sfd.ShowDialog() == DialogResult.OK) 
    { 
     cp = sfd.FileName; 
     var file = File.Create(cp); 
     file.Close(); 

     File.WriteAllLines(@cp, StudentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)); 

    } 
} 
1

ファイルを作成すると、File.WriteAllLinesがそれを行います(存在する場合はファイルをクリアします)。

private void SaveClass() { 
    sfd.DefaultExt = "txt"; 
    sfd.Filter = "Text Files | *.txt"; 

    if (sfd.ShowDialog() == DialogResult.OK) 
     File.WriteAllLines(sfd.FileName, StudentTextBox.Text 
     .Split(new String[] { Environment.NewLine }, 
       StringSplitOptions.RemoveEmptyEntries)); 
    } 
関連する問題