覆盖RichTextBox中的文本文件
现在,如果您编写文本并单击保存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
{
}
}
可以肯定的是,你只需要记住你最后保存的文件路径,而不是显示周围的下次再来的对话框;这样的事情应该有所帮助:
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
或许:从
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/
可能有助于一些?
这不是我所需要的。您的方法会要求您指定一个现有的文件。当我已经保存了文件时,我需要这个,我不再需要显示它保存位置。如在MS Word中一样。 – Aker
你是否在写同一个文件或附加到它?是的,如果您不需要指定位置,则使用“保存文件”对话框毫无意义!如果该文件已保存,则您已知道该位置。正如在我上面的评论中,你最好使用:File.WriteAllLines(“
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如果文件已经存在,这是你在找什么?
此方法仍使用OpenFileDialog。当你第一次保存,当然,必须有一个OpenFileDialog,但第二次保存时,该文件只需要覆盖而不调用OpenFileDialog。 – Aker
因为你需要在你的程序某处保存路径,更新了我的答案,它会完美地修复你的需求,我猜 –
是的,这是我需要的,但为什么当你第一次保存一切都很好,第二个(覆盖)似乎改变了格式。如果在第一次保存后,通过MS Word打开文件,那么一切都很好,但在第二次保存(覆盖)后,所有单词都会变成 - ?标志。我的母语是俄语。而且,当您单击打开按钮并选择保存的文件时,会发生错误 - 无效的文件格式。看起来格式会在您覆盖时发生变化。 – Aker
需要更多的信息,它不清楚你想要做什么。 File.WriteAllLines(“”,richTextBox1.Lines);其中:“”可能是:“C:\\ Temp \\ RTF.txt”,但我无法弄清楚你在用颜色做什么。 –
颜色并不重要。我编辑了这个问题。 – Aker
如果我正确理解你的要求,你喜欢做什么,如果文件存在,然后SaveFileDialog需要重新打开重新选择路径 –