Лекция: Доступ к файлам. Открытие файлов. Использование объекта File. Использование объекта FileStream. Чтение файлов. Запись файлов. Прочие операции с файлами и каталогами. Объекты File
Довольно часто для выполнения тех или иных функций веб-приложения требуется работать с текстовыми файлами. В ASP.NET для работы с текстовыми файлами есть класс File (System.IO namespace). Метод OpenText объекта класса File возвращает StreamReader, который можно «прочитать» при помощи двух методов: Read() и ReadToEnd().
Код примера довольно прост: сценарий выполняется в событии Page_Load, открывает файл выполняемоего скрипта и отображает его содержимое в браузере. Для удобства чтения символы перевода строки автоматически заменяются на HTML-тэг <br />.
C# (CSharp_fileOpen.aspx)
<%@Page Language=«C#»%>
<%@ import namespace=«System.IO» %>
<html>
<head>
<title>Using File Class in ASP.NET and C#</title>
</head>
<body>
<script language=«C#» runat=«server»>
void Page_Load() {
String fileName = «c:\\inetpub\\wwwroot\\CSharp_fileOpen.aspx»; //Файл, который надо открыть
StreamReader strmR = File.OpenText(fileName); //Открытие файла
lblStart.Text = Server.HtmlEncode(strmR.ReadToEnd()).Replace("\n", "<br />");//Чтение файла и вывод его содержимого в элемент Label
strmR.Close();
}
</script>
<asp:label runat=«server» id=«lblStart» />
</body>
</html>
File — класс, который предоставляет статические методы для создания, копирования, удаления, перемещения и открытия файлов, а также помогает при создании объектов FileStream.
В следующем примере показано, как использовать класс File чтобы проверить, существует ли файл, и в зависимости от результата или создайте новый файл и запись в него или открыть существующий файл и чтение из нее.
C#
using System;
using System.IO;
class Test
{
public static void Main()
{
string path = @«c:\temp\MyTest.txt»;
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine(«Hello»);
sw.WriteLine(«And»);
sw.WriteLine(«Welcome»);
}
}
// Open the file to read from.
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}
}
}
FileStream — класс, который предоставляет потоковый ввод/вывод в файле, поддерживая синхронные и асинхронные операции чтения и записи.
C#
using System;
using System.IO;
using System.Text;
class Test
{
public static void Main()
{
string path = @«c:\temp\MyTest.txt»;
// Delete the file if it exists.
if (File.Exists(path))
{
File.Delete(path);
}
//Create the file.
using (FileStream fs = File.Create(path))
{
AddText(fs, «This is some text»);
AddText(fs, «This is some more text,»);
AddText(fs, "\r\nand this is on a new line");
AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");
for (int i=1;i < 120;i++)
{
AddText(fs, Convert.ToChar(i).ToString());
}
}
//Open the stream and read it back.
using (FileStream fs = File.OpenRead(path))
{
byte[] b = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(b,0,b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
}
}
}
private static void AddText(FileStream fs, string value)
{
byte[] info = new UTF8Encoding(true).GetBytes(value);
fs.Write(info, 0, info.Length);
}
}
Открытие файлов
ASP.NET позволяет открывать файлы с двоичным и Unicode доступом. Unicode переводит двоичные последовательности в символы, предназначенные для чтения, такие как буквы и цифры.
Использование объекта File
Одним из способов открытия файла является использование объекта File. После того, как файл ассоциирован с объектом, могут использоваться различные методы его открытия, в зависимости от того, что мы собираемся с ним делать. В табл. 13.2 перечислены эти методы.
Таблица 13.2. Методы открытия файлов объекта File
Метод | Описание |
Open | Открывает файл с определенными привилегиями и возвращает объект Stream |
OpenRead() | Открывает поток только для чтения файла |
OpenText() | Возвращает объект streamReader для существующего файла |
OpenWrite() | Открывает поток Stream для чтения-записи |
1) Метод Open имеет 3 параметра: FileMode, FileAccess и FileShare (в приведенной последовательности). Первый из них, FileMode, определяет режим открытия файла операционной системой: для перезаписи существующего файла или для добавления дан-Ных к нему.;
Параметр FileAccess определяет привилегии доступа к файлу. Допустимые значения: Read (только для чтения), ReadWrite (для чтения и записи) и Write (только для записи).
Последний параметр, FileShare, определяет действия при попытке одновременного Доступа к файлу нескольких пользователей. дополнительного параметра None, определяющего эксклюзивные права данного процесса для доступа к файлу.
Хотелось бы отметить, что все методы класса File, за исключением OpenText, возвращают объект потока stream, обеспечивающий двоичный доступ к данным.
Следующий фрагмент показывает пример использования объекта File для открытия файла:
' создаем объект File и Streamreader
dim objFile as new File(Server.MapPath{«log.txtH)}
dim objReader as StreamReader
' открываем файл
objReader=objFile.OpenText
' выполняем какие-либо действия и закрываем StreamReader
objReader.Close
Тот же пример с использованием метода Open:
dim objFile as new File(Server.MapPath(»log.txt"})
dim objStream as Stream
objStream=objFile.Open(FileMode.OpenOrCreate, FileAccess.Read)
Использование объекта FileStream
Объект FileStream позволяет создать поток Stream для доступа к файлу. Основное достоинство— отсутствие необходимости использовать вначале объект File. Однако все-таки прежде нужно убедиться, что искомый файл существует.
В следующем фрагменте продемонстрировано открытие файла:
dim fs as new FileStream(Server.MapPath(“log.txt”), FileMode.OpenOrCreate)
Мы открыли файл в режиме OpenOrCreate.
Объект FileStream также имеет метод Seek перемещения в границах открытого потока. Синтаксис его следующий: Seek (offset,origin)
Смешение offset показывает, насколько далеко от базиса нам следует переместиться. Базис может принимать следующие значения: SeekOrigin.Begin (начало файла), SeekOrigin.Current (текущая позиция), SekOrigin.End (конец файла).
Чтение файлов
Теперь, после того как мы открыли файл, мы готовы к чтению его содержимого. В основном, ASP. NET осуществляет это с помощью объекта StreamReader. Как было отмечено ранее, этот объект конвертирует данные из двоичных в Unicode, предоставляя нам строку символов, готовых к отображению на странице. Инициализация объекта StreamReader проста:
dim ObjReader as new StreamReader(object)
Объект object может быть любым потоковым объектом (например, FileStream из предыдущего фрагмента) или путем к файлу.
Объект StreamReader использует несколько методов чтения символов из файла. Первый, Read, возвращает один символ из потока как целое число и переходит к следующему, например:
dim f as new File(Server,MapPath{«log.txt»)) ob jReader=f.OpenText Response.Write(objReader.Read & "<br>"} objReader.Close
Преобразуем числа в символы Unicode методом Chr класса Strings:
Response.Write(Strings.Chr(objReader.Read) & "<br>")
ReadLine читает все символы до достижения перевода строки, и
ReadToEnd, читающий символы до достижения конца потока
Peekсчитывает следующий символ, но не возвращает его. Это позволяет проверить наличие следующего символа в потоке. Если он не обнаружен, метод Peek возвращает -1.
Запись файлов
Объект StreamWriter позволяет записывать данные в потоки.