-1

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.

+0

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 –

Antwort

1

Ihre Frage ist nicht wirklich eine gute Lösung für Stack Overflow, da Ihre Anforderungen weitgehend von Dingen abhängen, die Sie uns noch nicht mitgeteilt haben und die Sie wahrscheinlich noch nicht kennen. Sie müssen Ihren Kunden fragen, was er will, herausfinden, simplest thing that could possibly work, senden Sie das an Ihren Kunden und lassen Sie es ausprobieren, dann Fixes in die nächste Iteration integrieren. Glaube nicht, dass du alles im Voraus entwerfen kannst und dass dein erster Versuch perfekt sein wird.

Using binary serialization for data files is a mistake. Das Format ist schlecht dokumentiert und kann sich ändern. Sie können es nicht von anderen Plattformen oder sogar von inkompatiblen Frameworks auf derselben Plattform verwenden. Es hat auch eine sehr schlechte Leistung für hierarchische Datenstrukturen. Wenn Ihre Anforderungen einfach sind, beginnen Sie mit Text-JSON- oder XML-Dateien. Wenn Sie komplexe Daten haben oder die Datenkonsistenz durchsetzen müssen, sollten Sie SQL verwenden.

-Code wie dies in der Regel ein Fehler:

catch (NotSupportedException nonSupportedException) 
{ 
    MessageBox.Show(nonSupportedException.Message); 
} 

catch ist für die Befestigung Fehler und MessageBox.Show keine Fehler beheben; es verbirgt Fehler und fährt fort, als ob nichts schief gelaufen wäre. Aber etwas ist falsch gelaufen; Sie müssen herausfinden, was und beheben Sie es. Wenn Sie es nicht beheben können, fangen Sie den Fehler nicht ab; lassen Sie umschließende Methoden damit umgehen.

Verwandte Themen