В листинге 15.1 представлен простой пример файлового ввода-вывода, иллюстрирующий некоторые различия между сбойными ситуациями, возникающими при обращении к локальным и удаленным файлам. Хотя вы и можете поместить этот код в форму мобильного приложения и запустить его на выполнение, вряд ли стоит это делать; этот листинг приведен в основном лишь для того, чтобы вы его изучили. Как видно из приведенных в коде комментариев, в случае доступа к серверу вероятность сбоя повышается не только для операции открытия файла, но и для файловых операций чтения/записи, что связано с возможностью потери доступа к сети. Вероятность сбоя повышается с увеличением количества коммуникационных уровней, отделяющих ваше устройство от данных, к которым оно пытается обратиться. Если используется беспроводная сеть, то сигнал может быть утерян вследствие перемещения устройства. Если доступ к данным осуществляется посредством виртуальной частной сети через брандмауэр, то сбой на данном сервере может наступить в любой момент. Если соединение проходит через сеть мобильной связи, то сбой может наступить по вине мобильной сети. Несмотря на то что каждый из этих уровней сам по себе может быть надежным, их объединение повышает вероятность сбоя. Поэтому при попытках переноса кода из систем с локальным доступом к файлам в системы, использующие доступ к удаленным серверам, следует быть очень внимательным. В коде, ориентированном на локальный доступ к файлам, могут быть заложены предположения, которые при доступе к удаленным источникам станут причиной сбоев. Чтобы этого не произошло, рекомендуется применять следующие меры предосторожности:
1.
2.
private void button1_Click(object sender, System.EventArgs e) {
//Запись в локальный файл
WriteFile("\\testfile.txt");
//Замените имя сервера (MyFileServer) именем своего сервера
//и удалите символы комментария.
//Запись в файл, находящийся в общей сетевой папке (MyFileShare) на сервере:
//"\\MyFileServer\MyFileShare"
//WriteFile("\\\\MyFileServer\\MyFileShare\\testfile.txt");
System.Windows.Forms.MessageBox.Show("Success");
}
private void button2_Click(object sender, System.EventArgs e) {
//Чтение из локального файла
int numberLinesInFile;
numberLinesInFile = CountNumberLinesInFile("\\testfile.txt");
//Отобразить количество считанных строк
System.Windows.Forms.MessageBox.Show(
"Successfully read file " + numberLinesInFile.ToString + " Lines.");
//Замените имя сервера (MyFileServer) именем своего сервера
//и удалите символы комментария.
/* //Записать файл из общей сетевой папки:
//"\\MyFileServer\MyFileShare"
numberLinesInFile = CountNumberLinesInFile(\\\\MyFileServer\\MyFileShare\\testfile.txt);
//Отобразить количество считанных строк