numberLinesInFile = CountNumberLinesInFile("\\testfile.txt");
//Отобразить количество считанных строк
System.Windows.Forms.MessageBox.Show(
"Successfully read file " + numberLinesInFile.ToString() + " Lines.");
//Замените имя сервера (MyFileServer) именем своего сервера
//и удалите символы комментария.
/* //Записать файл из общей сетевой папки:
//"\\MyFileServer\MyFileShare"
numberLinesInFile = CountNumberLinesInFile(\\\\MyFileServer\\MyFileShare\\testfile.txt);
//Отобразить количество считанных строк
System.Windows.Forms.MessageBox.Show(
"Successfully read file " + numberLinesInFile.ToString() + " Lines.");
*/
}
private void WriteFile(string filename) {
//----------------------------------------------------------------------
//СОЗДАНИЕ ФАЙЛА:
//
//Для локальных файлов:
// Сбой может возникнуть, если:
// 1. Файл уже существует, и мы не можем осуществить запись поверх него.
// 2. Отсутствует свободное место в файловой системе.
//
//Для файлов на сервере:
// Сбой может возникнуть по вышеперечисленным причинам, а также
// из-за проблем подключения к серверу через сеть,
// проблем безопасности и так далее
//----------------------------------------------------------------------
System.IO.StreamWriter myStreamWriter = System.IO.File.CreateText(filename);
//-------------------------------------------------------------
//ЗАПИСЬ В ФАЙЛ:
//Для локальных файлов:
// Если мы успешно открыли файл, значит, сможем осуществить
// в него запись, лишь бы не исчерпали доступное
// дисковое пространство.
//Для файлов на сервере:
// Сбой может возникнуть по вышеперечисленным причинам, а также
// из-за разрыва нашего сетевого соединения с сервером
//-------------------------------------------------------------
myStreamWriter.WriteLine("Hello!");
myStreamWriter.WriteLine("MyTextFile!");
myStreamWriter.WriteLine("GoodBye!");
//----------------------------------------------------------
//ЗАКРЫТЬ ФАЙЛ:
//Аналогично предыдущему, вероятность сбоя при выполнении
//этой операции повышается при доступе к файлу, находящемуся
//в общей сетевой папке
//----------------------------------------------------------
myStreamWriter.Close();
}
private int CountNumberLinesInFile(string filename) {
int numberLinesInput = 0;
//------------------------------------------------------------------
//ОТКРЫТЬ ФАЙЛ:
//Для локальных файлов:
// В случае доступа к локальным файлам устройства можно генерировать
// исключение, если доступ к файлу оказывается невозможным
//Для файлов на сервере:
// В дополнение ко всем вышеперечисленным причинам возможных сбоев
// при открытии локального файла сбои также возможны
// из-за проблем доступа к сети, принятой на сервере
// политики безопасности и так далее
//------------------------------------------------------------------
System.IO.StreamReader myStreamReader = System.IO.File.OpenText(filename);
string inputLine;
//Организовать построчное чтение файла
do {
//--------------------------------------------------------------
//ВВЕСТИ СТРОКУ:
//Для локальных файлов:
// Если файл был успешно открыт, этот вызов
// никогда не завершится сбоем.
//
//Для файлов на сервере:
// Проблемы доступа к беспроводным сетям, с которыми мы можем
// столкнуться при попытке доступа к файлу, повышают вероятность
// сбоя для этого кода и генерации соответствующего исключения
//--------------------------------------------------------------
inputLine = myStreamReader.ReadLine();
//Если не было возвращено значение 'null', то мы
//не достигли конца файла. Увеличить значение счетчика строк.
if (inputLine != null) {
numberLinesInput++;
}
//Продолжать выполнение, пока в файле есть данные для чтения
} while(inputLine != null);
//----------------------------------------------------------
//ЗАКРЫТЬ ФАЙЛ:
//Аналогично предыдущему, вероятность сбоя при выполнении
//этой операции повышается при доступе к файлу, находящемуся
//в общей сетевой папке
//----------------------------------------------------------
myStreamReader.Close();
//Возвратить количество строк в файле
return numberLinesInput;
}
Имитация сбоев связи с целью тестирования отказоустойчивости приложения
Настоятельно рекомендуется тестировать всевозможные условия возникновения ошибок в процессе передачи данных, намеренно вводя нарушения связи и наблюдая за тем, как ведет себя приложение в этих условиях. Не менее важно тестировать, насколько удачными оказываются попытки возобновления доступа к сети после того, как ваше приложение устранило последствия предшествующего сбоя.
Читать дальше