我有一些關於如何正確執行文件處理的問題。我在我的程序中使用二進制序列化和反序列化。最重要的是,我還導出和導入文本文件。我列出了我的序列化代碼下面的一個例子。 我使用開放文件對話框來選擇文件夾/文件。什麼是在C#中的文件處理的最佳做法?
這是我的二進制序列化方法:
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();
}
而這些都是我捕捉到的異常:
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);
}
我趕上解串同樣的例外。唯一的區別是這3行:
if (File.Exists(fileName)) { }
FileStream fileStream = new FileStream(fileName, FileMode.Open);
Animals = formatter.Deserialize(fileStream) as List<Animal>;
如果我得到錯誤的數據,該怎麼辦?例如:文件的一半有正確的數據,另一半沒有。
我應該如何編寫序列化單元測試?像SecurityException這樣的很多異常都很難測試。
我應該捕捉哪些異常?我看着MSDN,但我不確定是否應該直接抓住列出的所有例外情況。例如,我故意不抓住ArgumentOutOfRange異常,因爲我不想捕捉編程錯誤。
我對閱讀和編寫文本文件有同樣的問題。在測試/異常捕獲方面有差異嗎?唯一的區別是我使用StreamWriter來編寫文本文件。我使用File.ReadAllLines來讀取我選擇的文本文件。
謝謝。
爲了100%誠實,您的所有問題似乎都是您或您的最終用戶/客戶需要回答的要求。至於編寫測試序列化:http://stackoverflow.com/questions/236599/how-to-unit-test-if-my-object-is-really-serializable –