J'ai deux méthodes: saveFile
et saveAsToFile
. Le premier est censé écraser le contenu du fichier existant. Alors que le second est censé enregistrer en tant que nouveau fichier (si le courant est inexistant ou l'utilisateur veut juste faire une copie.)C# Remplacer le fichier texte - rien n'est écrit dans le fichier
Lorsque j'utilise la méthode saveAsToFile
, cela fonctionne à chaque fois. Lorsque j'utilise la méthode saveFile
, il n'écrit rien. (Je ne vois MessageBox "Saved!", Bien que.)
Voici mes méthodes:
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
}
}
}
Comme vous pouvez le voir par les commentaires dans le code; J'ai essayé d'utiliser using
, puis j'ai essayé de "vider manuellement" le streamwriter
, mais rien ne fonctionne. Le saveAsToFile
fonctionne à chaque fois. Il écrase le fichier texte comme prévu, pas de problèmes. Alors que saveFile
n'écrit rien dans le fichier. (Laissant inchangé.)
J'ai essayé la recherche d'erreurs dans saveFile
en utilisant MessageBox.Show
pour imprimer les valeurs de savefile.Filename
et line
dans les endroits appropriés - ils ont tous travaillé comme prévu, mais rien est écrit dans le fichier texte actuel.
isStrArrayNotEmpty
renvoie true si le tableau de chaînes ne contient aucun espace blanc. getDocumentSavedStatus
renvoie la valeur d'un boolean
qui indique si le fichier a été enregistré avant ou non (inexistante/inexistante) getDocumentChangedStatus
renvoie la valeur d'un boolean
qui indique si le fichier a été modifié ou non (astérisque à la fin de le nom du fichier, ce qui indique que le travail sera perdue si l'utilisateur ferme l'application.)
Je vous recommande d'utiliser le débogueur Visual Studio. Et passer du temps à analyser votre code. –