C# 覆盖文本文件 - 没有任何内容写入文件
C# Overwrite text file - nothing is written to file
我有两种方法:saveFile
和 saveAsToFile
。第一个应该覆盖当前现有文件的内容。而第二个应该保存为一个新文件(如果当前文件不存在或者用户只想制作一个副本。)
当我使用 saveAsToFile
方法时,它每次都有效。当我使用 saveFile
方法时,它不写任何东西。 (不过我确实看到了 "Saved!" MessageBox。)
这是我的方法:
public void saveFile(string[] inData, string inDataTitle)
{
//This method saves the file
SaveFileDialog savefile;
string trueFileName;
if (isStrArrayNotEmpty(inData)) {
//Only attempt to save the file if there is anything written in the textArea
if (f.getDocumentSavedStatus()) {
if (f.getDocumentChangedStatus()) {
savefile = new SaveFileDialog();
if (inDataTitle.EndsWith("*")) {
//Remove the asterisk from the document name
savefile.FileName = inDataTitle.Substring(0, inDataTitle.Length - 1);
}
else {
savefile.FileName = inDataTitle;
}
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
/*
using (StreamWriter sw = new StreamWriter(savefile.FileName, false))
foreach (string line in inData) {
sw.WriteLine(line);
}
*/
f.setDocumentName(string.Empty);
trueFileName = Path.GetFileName(savefile.FileName);
f.setDocumentName(trueFileName);
f.setDocumentSavedStatus(true);
f.setDocumentChangedStatus(false); //Changes saved, status updated
MessageBox.Show("Saved!");
}
}
else {
//If the document hasn't been saved before, send the values to the 'Save As' method
saveAsToFile(inData, inDataTitle);
}
}
}
public void saveAsToFile(string[] inData, string inDataTitle)
{
//This method checks if there is anything written in the texArea,
//if so it prompts the user to save the file to disk (Save As)
SaveFileDialog savefile;
string trueFileName;
if (isStrArrayNotEmpty(inData)) {
//Only attempt to save the file if there is anything written in the textArea
savefile = new SaveFileDialog();
if (inDataTitle.EndsWith("*")) {
//Remove the asterisk from the document name
savefile.FileName = inDataTitle.Substring(0, inDataTitle.Length - 1);
}
else {
savefile.FileName = inDataTitle;
}
savefile.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
if (savefile.ShowDialog() == DialogResult.OK) {
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
/*
using (StreamWriter sw = new StreamWriter(savefile.FileName))
foreach (string line in inData) {
sw.WriteLine(line);
}
*/
f.setDocumentName(string.Empty);
trueFileName = Path.GetFileName(savefile.FileName);
f.setDocumentName(trueFileName);
f.setDocumentSavedStatus(true);
f.setDocumentChangedStatus(false); //Changes saved, status updated
}
}
}
从代码中的注释可以看出;我尝试使用 using
,然后尝试 "manually flush" streamwriter
,但没有任何效果。
每次都使用 saveAsToFile
。它按预期覆盖文本文件,没有问题。虽然 saveFile
不会向文件写入任何内容。 (保持不变。)
我尝试通过使用 MessageBox.Show
在适当的位置打印 savefile.Filename
和 line
的值来查找 saveFile
中的错误 - 它们都按预期工作,但是没有任何内容写入实际的文本文件。
isStrArrayNotEmpty
returns 如果字符串数组不包含任何空格,则为真。
getDocumentSavedStatus
returns 的值 boolean
表示文件之前是否保存过(存在/不存在)
getDocumentChangedStatus
returns 一个 boolean
的值,它告诉文件是否被修改(文件名末尾有星号,表示如果用户关闭,工作将会丢失应用程序。)
尝试替换
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
和
File.WriteAllLines(saveFile.Filename, inData);
inDataTitle 参数是否包含您要保存的文件名的路径?如果不是,它可能保存到同名文件但在不同的文件夹中。
在你的行之后:-
StreamWriter sw = new StreamWriter(savefile.FileName, false);
添加行:-
MessageBox.Show(((FileStream)(sw.BaseStream)).Name);
它会告诉您文件的保存位置。
我有两种方法:saveFile
和 saveAsToFile
。第一个应该覆盖当前现有文件的内容。而第二个应该保存为一个新文件(如果当前文件不存在或者用户只想制作一个副本。)
当我使用 saveAsToFile
方法时,它每次都有效。当我使用 saveFile
方法时,它不写任何东西。 (不过我确实看到了 "Saved!" MessageBox。)
这是我的方法:
public void saveFile(string[] inData, string inDataTitle)
{
//This method saves the file
SaveFileDialog savefile;
string trueFileName;
if (isStrArrayNotEmpty(inData)) {
//Only attempt to save the file if there is anything written in the textArea
if (f.getDocumentSavedStatus()) {
if (f.getDocumentChangedStatus()) {
savefile = new SaveFileDialog();
if (inDataTitle.EndsWith("*")) {
//Remove the asterisk from the document name
savefile.FileName = inDataTitle.Substring(0, inDataTitle.Length - 1);
}
else {
savefile.FileName = inDataTitle;
}
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
/*
using (StreamWriter sw = new StreamWriter(savefile.FileName, false))
foreach (string line in inData) {
sw.WriteLine(line);
}
*/
f.setDocumentName(string.Empty);
trueFileName = Path.GetFileName(savefile.FileName);
f.setDocumentName(trueFileName);
f.setDocumentSavedStatus(true);
f.setDocumentChangedStatus(false); //Changes saved, status updated
MessageBox.Show("Saved!");
}
}
else {
//If the document hasn't been saved before, send the values to the 'Save As' method
saveAsToFile(inData, inDataTitle);
}
}
}
public void saveAsToFile(string[] inData, string inDataTitle)
{
//This method checks if there is anything written in the texArea,
//if so it prompts the user to save the file to disk (Save As)
SaveFileDialog savefile;
string trueFileName;
if (isStrArrayNotEmpty(inData)) {
//Only attempt to save the file if there is anything written in the textArea
savefile = new SaveFileDialog();
if (inDataTitle.EndsWith("*")) {
//Remove the asterisk from the document name
savefile.FileName = inDataTitle.Substring(0, inDataTitle.Length - 1);
}
else {
savefile.FileName = inDataTitle;
}
savefile.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
if (savefile.ShowDialog() == DialogResult.OK) {
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
/*
using (StreamWriter sw = new StreamWriter(savefile.FileName))
foreach (string line in inData) {
sw.WriteLine(line);
}
*/
f.setDocumentName(string.Empty);
trueFileName = Path.GetFileName(savefile.FileName);
f.setDocumentName(trueFileName);
f.setDocumentSavedStatus(true);
f.setDocumentChangedStatus(false); //Changes saved, status updated
}
}
}
从代码中的注释可以看出;我尝试使用 using
,然后尝试 "manually flush" streamwriter
,但没有任何效果。
每次都使用 saveAsToFile
。它按预期覆盖文本文件,没有问题。虽然 saveFile
不会向文件写入任何内容。 (保持不变。)
我尝试通过使用 MessageBox.Show
在适当的位置打印 savefile.Filename
和 line
的值来查找 saveFile
中的错误 - 它们都按预期工作,但是没有任何内容写入实际的文本文件。
isStrArrayNotEmpty
returns 如果字符串数组不包含任何空格,则为真。
getDocumentSavedStatus
returns 的值 boolean
表示文件之前是否保存过(存在/不存在)
getDocumentChangedStatus
returns 一个 boolean
的值,它告诉文件是否被修改(文件名末尾有星号,表示如果用户关闭,工作将会丢失应用程序。)
尝试替换
StreamWriter sw = new StreamWriter(savefile.FileName, false);
foreach (string line in inData) {
sw.WriteLine(line);
}
sw.Flush();
if (sw.BaseStream != null)
sw.BaseStream.Flush();
sw.Close();
和
File.WriteAllLines(saveFile.Filename, inData);
inDataTitle 参数是否包含您要保存的文件名的路径?如果不是,它可能保存到同名文件但在不同的文件夹中。
在你的行之后:-
StreamWriter sw = new StreamWriter(savefile.FileName, false);
添加行:-
MessageBox.Show(((FileStream)(sw.BaseStream)).Name);
它会告诉您文件的保存位置。