У меня есть два способа: saveFile
и saveAsToFile
. Первый должен перезаписать содержимое текущего существующего файла. В то время как второй должен сохранять как новый файл (если текущий не существует или пользователь просто хочет сделать копию.)C# Перезаписать текстовый файл - ничего не записывается в файл
Когда я использую метод 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
, а затем попытался «вручную сбросить» streamwriter
, но ничего не работает.
Использование saveAsToFile
работает каждый раз. Он перезаписывает текстовый файл, как ожидалось, никаких проблем. Пока saveFile
ничего не пишет в файл. (Если оставить без изменений.)
Я пытался найти ошибки в saveFile
с помощью MessageBox.Show
для печати значений savefile.Filename
и line
в соответствующих местах - все они работали, как и ожидалось, но ничего не написано фактического текстового файла.
isStrArrayNotEmpty
возвращает true, если массив строк не содержит пробелов. getDocumentSavedStatus
возвращает значение из boolean
, который говорит, если файл был сохранен ранее или нет (существует/не существует) getDocumentChangedStatus
возвращает значение из boolean
, который говорит, если файл был изменен или нет (звездочка в конце имя файла, указывающее, что работа будет потеряна, если пользователь закрывает приложение.)
Я бы рекомендовал использовать отладчик Visual Studio. И потратить некоторое время на анализ вашего кода. –