
- •11. Организация работы с файлами
- •11.1. Использование стандартных диалоговых окон открытия и сохранения файлов
- •11.2. Использование стандартного диалогового окна обзора папок
- •11.3. Использование класса System.Io.File для работы с файлами
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •11.4. Использование класса System.Io.Directory для работы с папками
- •If (Directory.Exists(currentDir)) // Если папка существует
- •If (Directory.Exists(sourceDir) & Directory.Exists(destDir) &
- •If (Directory.Exists(destDir)) // Если папка существует
- •11.5. Использование класса System.Io.Path для работы со строкой пути к папке или файлу
- •If (Path.HasExtension(path1))
- •If (!Path.HasExtension(path2))
- •If (!Path.IsPathRooted(path3))
- •11.6. Использование класса System.Io.FileInfo для работы с файлами
- •If (!fi1.Exists)
- •11.7. Использование класса System.Io.DirectoryInfo для работы с файлами и папками
- •If (cd.Exists) // Если заданная папка существует...
- •If (sd.Exists & dd.Exists & !md.Exists)
- •If (dd.Exists) // Если папка существует
- •11.8. Использование класса System.Io.DriveInfo для работы с дисками
- •11.9. Использование класса System.Io.FileStream для работы с файлами
- •If (fs.CanRead && fs.CanWrite)
- •11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами
If (fs.CanRead && fs.CanWrite)
Console.WriteLine("Файл {0} может быть использован " +
"для записи и чтения.", fname);
else if (fs.CanRead)
Console.WriteLine("Файл {0} не перезаписываем.", fname);
Console.ReadLine();
}
}
Пример 11.15. Использование свойств Length и Name, а также методов WriteByte и ReadByte класса FileStream для записи данных в файл (байт за байтом) и проверки правильности записанных данных.
using System;
using System.IO;
class FStream
{ static void Main()
{ const string fileName = @"c:\temp\MyTest.txt";
// Генерация случайных данных для записи в файл.
byte[] dataArray = new byte[1000];
new Random().NextBytes(dataArray);
FileStream fileStream = new FileStream(fileName,
FileMode.Create);
// Запись данных в файл байт за байтом.
for (int i = 0; i < dataArray.Length; i++)
fileStream.WriteByte(dataArray[i]);
// Установка потоковой позиции в начало файла.
fileStream.Seek(0, SeekOrigin.Begin);
// Чтение и проверка данных.
for (int i = 0; i < fileStream.Length; i++)
if (dataArray[i] != fileStream.ReadByte())
{ Console.WriteLine("Ошибка записи данных.");
return;
}
Console.WriteLine("Данные были записаны в файл {0} и " +
"проверены.", fileStream.Name);
Console.ReadLine();
}
}
/* Вывод:
Данные были записаны в файл c:\temp\MyTest.txt и проверены.
*/
Пример 11.16. Использование свойства Length, а также методов Read и Write класса FileStream для считывания содержимого одного файла и запись его в другой файл.
using System;
using System.IO;
class TestRW
{ public static void Main()
{ // Определение файла для чтения и нового файла (для записи).
string pathSource = @"c:\temp\Source.txt";
string pathNew = @"c:\temp\newFile.txt";
FileStream fsSource = new FileStream(pathSource, FileMode.Open,
FileAccess.Read);
// Чтение исходного файла в байтовый массив.
byte[] bytes = new byte[fsSource.Length];
int numBytesToRead = (int)fsSource.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{ // Чтение возвращает значение от 0 до numBytesToRead.
int n = fsSource.Read(bytes, numBytesRead,
numBytesToRead);
if (n == 0) break; // Выход из цикла, если конец файла
numBytesRead += n;
numBytesToRead -= n;
}
numBytesToRead = bytes.Length;
// Вывод на экран:
Console.WriteLine("Файл {0} прочитан.", pathSource);
Console.WriteLine("Массив считанных байтов:");
for (int i = 0; i < bytes.Length; i++)
Console.WriteLine(bytes[i]);
// Запись байтового массива в другой FileStream (в новый файл).
FileStream fsNew = new FileStream(pathNew, FileMode.Create,
FileAccess.Write);
fsNew.Write(bytes, 0, numBytesToRead);
Console.WriteLine("Файл {0} записан.", pathNew);
Console.ReadLine();
}
}
/* Вывод:
Файл c:\temp\Source.txt прочитан.
Массив считанных байтов:
...
Файл c:\temp\newFile.txt записан.
*/