2017-06-15 129 views
-1

現在,如果您編寫文本並單擊保存button,則會出現OpenFileDialog。如果您在同一份文件中完成某項操作並再次單擊save button,則需要再次選擇保存位置。如何在保存同一個文件時不需要每次創建一個新文件,而只是覆蓋當前文件?對不起我的英語不好。覆蓋RichTextBox中的文本文件

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;屬性,以避免提示messagebox如果文件已經存在,這是你在找什麼?

+0

此方法仍使用OpenFileDialog。當你第一次保存,當然,必須有一個OpenFileDialog,但第二次保存時,該文件只需要覆蓋而不調用OpenFileDialog。 – Aker

+0

因爲你需要在你的程序某處保存路徑,更新了我的答案,它會完美地修復你的需求,我猜 –

+0

是的,這是我需要的,但爲什麼當你第一次保存一切都很好,第二個(覆蓋)似乎改變了格式。如果在第一次保存後,通過MS Word打開文件,那麼一切都很好,但在第二次保存(覆蓋)後,所有單詞都會變成 - ?標誌。我的母語是俄語。而且,當您單擊打開按鈕並選擇保存的文件時,會發生錯誤 - 無效的文件格式。看起來格式會在您覆蓋時發生變化。 – Aker