Ich habe ein paar Fragen zum richtigen Umgang mit Dateien. Ich verwende binäre Serialisierung und Deserialisierung in meinem Programm. Außerdem exportiere und importiere ich Textdateien. Ich habe unten ein Beispiel meines Serialisierungscodes aufgeführt. Ich benutze einen Openfile-Dialog, um Ordner/Dateien auszuwählen.Was sind die besten Praktiken für die Dateiverarbeitung in C#?
Dies ist meine binäre Serialisierung Methode:
if (string.IsNullOrWhiteSpace(fileName))
{
throw new ArgumentOutOfRangeException("fileName");
}
FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate);
try
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, Animals);
}
finally
{
fileStream.Close();
}
Und das sind die Ausnahmen i fangen:
try
{
administration.Load(fileName);
}
catch (NotSupportedException nonSupportedException)
{
MessageBox.Show(nonSupportedException.Message);
}
catch (UnauthorizedAccessException unauthorizedAccesException)
{
MessageBox.Show(unauthorizedAccesException.Message);
{
catch (SecurityException securityException)
{
MessageBox.Show(securityException.Message);
}
catch (DirectoryNotFoundException directoryNotFoundException)
{
MessageBox.Show(directoryNotFoundException.Message);
}
catch (IOException IOException)
{
MessageBox.Show(IOException.Message);
}
ich die gleichen Ausnahmen für die Deserialisierung fangen. Der einzige Unterschied ist, dass es diese 3 Zeilen gibt:
if (File.Exists(fileName)) { }
FileStream fileStream = new FileStream(fileName, FileMode.Open);
Animals = formatter.Deserialize(fileStream) as List<Animal>;
Was soll ich tun, wenn ich falsche Daten bekomme? Zum Beispiel: Die Hälfte der Datei hat die richtigen Daten und die andere Hälfte nicht.
Wie soll ich Komponententests für die Serialisierung schreiben? Viele Ausnahmen wie SecurityException sind schwer zu testen.
Welche Ausnahmen sollte ich fangen? Ich habe MSDN angeschaut, aber ich bin mir nicht sicher, ob ich alle aufgelisteten Ausnahmen einfach auffangen sollte. Ich fange zum Beispiel absichtlich nicht die ArgumentOutOfRange-Ausnahme ab, weil ich keine Programmierfehler bekommen will.
Ich habe die gleichen Fragen zum Lesen und Schreiben von Textdateien. Gibt es einen Unterschied beim Testen/Ausnahmefangen? Der einzige Unterschied ist, dass ich StreamWriter zum Schreiben von Textdateien verwende. Und ich benutze File.ReadAllLines, um die ausgewählte Textdatei zu lesen.
Vielen Dank.
Um 100% ehrlich zu sein, scheinen alle Ihre Fragen Anforderungen zu sein, die Sie oder Ihr Endbenutzer/Kunde beantworten müssen. Soweit schreiben Tests für die Serialisierung: http://stackoverflow.com/questions/236599/how-to-unit-test-if-my-object-is-really-serializable –