2017-06-15 20 views
-1

テキストを入力して保存buttonをクリックすると、OpenFileDialogが表示されます。同じ文書内で何かを終えてもう一度save buttonをクリックした場合は、もう一度保存場所を選択する必要があります。どのようにして同じファイルを保存するときに、毎回新しいファイルを作成する必要はなく、現在のファイルを上書きするだけですか?私の英語には申し訳ありません。リッチテキストボックスからテキストファイルを上書きする

private void buttonSave_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog sfd = new SaveFileDialog(); 
    sfd.Filter = "Rich Text File | *.rtf"; 

    if (sfd.ShowDialog() == DialogResult.OK) 
    { 
     richTextBox1.SaveFile(sfd.FileName); 
    } 
    else 
    { 

    } 
} 
+0

もう少し情報が必要ですが、何をしようとしているのか明確ではありません。 File.WriteAllLines( "<パスの保存場所>"、richTextBox1.Lines); 「<保存場所はここ>」は「C:\\ Temp \\ RTF.txt」ですが、色で何をしているのか分かりません。 –

+0

色は重要ではありません。私はその質問を編集した。 – Aker

+0

あなたの要求が正しく理解されていれば、ファイルが存在すれば達成するのが好きなのですが、SaveFileDialogはパスを再選択するために再度開く必要があります –

答えて

0

確かに、保存した最後のファイルパスを覚えておいて、次にダイアログを表示しないでください。このようなものは助ける必要があります。この例では

void Main() 
{ 
    Save(); 
} 

private string _filePath = ""; 
void Save() 
{ 
    var overwrite = false; 

    if (!string.IsNullOrEmpty(_filePath)) 
    { 
     var res = 
     MessageBox.Show("Would you like to overwrite your last saved file?", "Overwrite?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, 
     MessageBoxOptions.DefaultDesktopOnly, false); 

     if (res == DialogResult.Cancel) return; 
     if (res == DialogResult.No) overwrite = false; 
     if (res == DialogResult.Yes) overwrite = true; 
    } 

    if (!overwrite) 
    { 
     var sfd = new SaveFileDialog(); 
     sfd.Filter = "Rich Text File|*.rtf"; 
     var res = sfd.ShowDialog(); 
     if (res != DialogResult.OK) return; 
     _filePath = sfd.FileName; 
    } 

    // do the richTextBox.SaveFile(_filePath) here. 

} 

をそれ:

CHECK IF FILE PATH ALREADY SET 
IF NOT THEN 
    ASK USER IF THEY WANT TO OVERWRITE THE LAST FILE 
    IF CANCEL THEN DON'T SAVE 
    IF YES THEN SET OVERWRITE TO TRUE 
    IF NO THEN SET OVERWRITE TO FALSE 
END IF 
CHECK IF OVERWRITING 
IF OVERWRITING THEN 
    SHOW SAVE FILE DIALOG 
    IF USER DIDN'T CLICK OK THEN DON'T SAVE 
    IF USER CLICKED OK, SET THE NEW FILE PATH TO USE 
END IF 
SAVE THE FILE USING THE NOW-REMEMBERED FILE PATH 
+0

私はMessageBoxは必要ありません。そして、それは "richTextBox.SaveFile(_filePath)ここで何を意味するのですか?" – Aker

+0

あなたの通常のセーブコードをそこに置いてください: 'richTextBox1.SaveFile(** _ filePath **);' – Clint

+0

@Kayaそして私はあなたのユーザが心を変えられないようにする可能性があるので、メッセージボックスを追加しました。ある時点でファイルを上書きします。常にあなたのユーザーオプションを与え、彼らはそれを感謝します。 – Clint

0

おそらく:から

private void SaveButton_Click(object sender, EventArgs e) 
{ 

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
saveFileDialog1.InitialDirectory = @"C:\"; 
saveFileDialog1.Title = "Save text Files"; 
saveFileDialog1.CheckFileExists = true; 
saveFileDialog1.CheckPathExists = true; 
saveFileDialog1.DefaultExt = "txt"; 
saveFileDialog1.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; 
saveFileDialog1.FilterIndex = 2; 
saveFileDialog1.RestoreDirectory = true;  

if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    textBox1.Text = saveFileDialog1.FileName;    
} 
} 

例:http://www.c-sharpcorner.com/uploadfile/mahesh/savefiledialog-in-C-Sharp/

は、いくつかを助けるかもしれませんか?

+0

これは私が必要とするものではありません。既存のファイルを指定するように求められます。私はすでにファイルを保存したときに、保存場所を表示する必要がなくなりました。 MS Wordのように。 – Aker

+0

あなたは同じファイルを書いたり上書きしたりしていますか?はい、場所を指定する必要がない場合は、ファイルの保存ダイアログを使用する必要はありません。ファイルが既に保存されている場合、あなたはすでにその場所を知っています。上記のコメントのように、使用する方が良いでしょう:File.WriteAllLines( ""、richTextBox1.Lines); "<パスの保存場所>"は次のようになります。 "C:\\ Temp \\ RTF.txt" –

0
private string filePath = string.Empty; 
    private void SaveButton_Click(object sender, EventArgs e) 
    { 
     if (File.Exists(filePath)) 
     { 
      byte[] buffer = Encoding.ASCII.GetBytes(richTextBox1.Text); 
      MemoryStream ms = new MemoryStream(buffer); 
      //write to file 
      FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write); 
      ms.WriteTo(file); 
      file.Close(); 
      ms.Close(); 
     } 
     else 
     { 
      SaveFileDialog sfd = new SaveFileDialog(); 
      sfd.Filter = "Rich Text File | *.rtf"; 
      sfd.OverwritePrompt = false; 
      if (sfd.ShowDialog() == DialogResult.OK) 
      { 
       richTextBox1.SaveFile(sfd.FileName); 
       filePath = sfd.FileName; 

      } 
     } 
    } 

sfd.OverwritePrompt = falseを使用できます。ファイルが既に存在する場合はプロンプトメッセージボックスを避けるためのプロパティ、これはあなたが探しているものですか?

+0

この方法でもOpenFileDialogが使用されます。最初に保存するときはもちろん、OpenFileDialogが必要ですが、2回目の保存ではOpenFileDialogを呼び出さずにファイルを上書きする必要があります。 – Aker

+0

あなたのプログラムのどこかにパスを保存して、私の答えを更新する必要があるということについては、それは完全にあなたの要件を修正するでしょう –

+0

はい、これは私が必要ですが、最初にすべてを保存すると、 )フォーマットを変更するようです。最初の保存後にMS Wordからファイルを開くと、すべて正常ですが、2回目の保存(上書き)後にすべての単語が - ?符号。私の母国語はロシア語です。また、開いているボタンをクリックして保存されたファイルを選択すると、エラーが発生します。無効なファイル形式です。上書きするとフォーマットが変わるようです。 – Aker

関連する問題