Глава 2 Работа с файлами в С#
Для изучения данного вопроса будем использовать проект
решения предыдущего параграфа, убрав коды обработчиков событий
нажатия кнопок. Контролы RichTextBox, TextBox, OpenFileDialog
и SaveFileDialog нам пока не мешают и будут полезны в дальнейшем.
Обработчик нажатия кнопки 3 и функцию Form1_Load оставим прежними:
private void button3_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
private void Form1_Load(object sender, System.EventArgs e)
{
richTextBox1.Clear();
textBox1.Text="";
}
В начало
Параграф 1 Пространство имен System.IO
В предыдущем разделе в параграфе "Отображение текстовой информации"
кратко мы уже останавливались на классах для работы с текстовыми файлами
из пространства имен System.IO. Тогда они нам понадобилиь для
простого ввода/вывода текста из/в файлы. Здесь же речь пойдет об
этих и других возможностях пространства имен для работы с файлами.
В библиотеки .NET Framework более чем 2500 классов. Все они
является потомками класса System.Object. При объявлении класса
обычно не указывается System.Object (это добавляется по умолчанию),
хотя это и можно сделать и явно:
class MyClass:System.Object
{
...
}
Все классы сгруппированы по пространствам имен. Пространство имен System.IO (Рис.1)
содержит классы и типы данных, используемые для
работы (чтение и запись) с потоками и файлами и файлоыой системой.
Рис.1 Пространство имен System.IO
Классы Directory и File яляются прямыми потомками класса
Object и содержат статические методы для выполнения различных
операций с папками и файлаи (создание, удаление, проверка
существования, и т. п.).
Класс Path - прямой потомок класса
Object содержат статические методы для работы с путями
и именами файлов.
Классы BinaryReader и BinaryWriter, также примые наследники
класса Object, содержат статические методы для
для чтения и записи примитивных типов данных как бинарных значений.
Он содержит методы для каждого типа (ReadBoolean, ReadByte,
ReadBytes, ReadChar, ReadChars, ReadDecimal, ReadDouble и т.д.).
Классы DirectoryInfo и FileInfo - потомками абстрактного класса
FileSystemInfo содержат не статические методы для выполнения
операций с папками и файлами (создание, удаление, проверка
существования, и т. п.). Для использования данных классов
требуется создать их экземпляры. Классы FileInfo и DirectoryInfo
являются "запечатанными" классами (sealed classes) - мы
можем создавать экземпляры этих классов, но наследовать
от них невозможно.
Класс Stream - наследник абстрактного класса MarhalByRefObjekt -
также абстрактный класс, обеспечивающий представление
последовательности байтов. Классы наследники класса Stream,
обеспечивают функции для работы с файлами (класс FileStream),
памятью (класс MemoryStream) и дают возможность создать
буфер в памяти для буферизованных потоковых операций чтения
и записи(BufferedStream). Потоки поддерживают операции чтения,
записи, а также операции позиционирования.
Классы TextReader и TextWriter используется для чтения
и записи последовательности символов потоков. Их наследники
StreamReader, StringReader, StreamWriter, StringWriter обеспечивают
возможность чтения и записи строк и символов в строках.
В начало
Параграф 2 Класс File и его использвание
Класс File содержит набор статических методов, которые могут
быть использованы для создания, открытия, копирования, удаления и
перемещения файлов. Некоторые из методов класса File (например Create()) создают объекты
типа FileStream или StreamWriter. При рассмотрении методов класса
мы пока не будем заострять внимание на возможных прерываниях при
использовании методов класса (об этом более подробно при рассмотрении
методов класса FileInfo - прерывания у методов обоих классов
идентичны). Рассмотрим основные метода класса:
Delete(string path) - удаляет файл c именем и в каталоге,
определенным path.
Exists(string path) - проверяет наличие файла в указанном каталоге
- при наличии файла возвращает true.
Create(string path), или Create (string path, int bufersize),
используется для создания файла c именем и в каталоге, определенным
path и с указанным размером буфера. Методы возвращают объект типа
FileStream. Исключение возникает если диск закрыт для записи.
private void button1_Click(object sender, System.EventArgs e)
{
//Символ @ блокирует использование косой черты
//как маркера начала спецсимвола
string path = @"c:\a.txt";
//Испрользование методов Exists() и Delete()
if(File.Exists(path))
{
File.Delete(path);
}
//Создаем файл и объект streamwriter, который будет
//существовать до закрытия фигурной скобки
using(FileStream filestream = File.Create(path, 1024))
{
Byte[] text =
new UTF8Encoding(true).GetBytes("Текст, который будет записан в файл");
filestream.Write(text, 0, text.Length);
}
}
Open(string path,FileMode mode,FileAccess acess,FileShare share) - открывает
файл по указанному пути, с указанным режимом чтения,
зписи и доступа для чтения - записи и указанной опцией совместного
использования. При открытии создает объект типа FileStream.
Обязательными параметрами являются только первые два.
private void button1_Click(object sender, System.EventArgs e)
{
//Символ @ блокирует использование косой черты
//как маркера начала спецсимвола
string path = @"c:\c.txt";
//Открываем файл и создаем объект filestream, который будет
//существовать до закрытия фигурной скобки
using(FileStream filestream =
File.Open(path,FileMode.Open,FileAccess.ReadWrite,FileShare.ReadWrite))
{
byte[] bText = new byte[1024];
UTF8Encoding text = new UTF8Encoding(true);
while(filestream.Read(bText,0,bText.Length) > 0)
{
richTextBox1.AppendText(text.GetString(bText)+"\r\n");
}
try
{
using(FileStream filestream2
= File.Open(path,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
Text="Файл открыт дважды.";
}
}
catch(Exception ex)
{
string message=ex.Message;
Text="Файл не может быть открыт дважды.";
}
}
Данный фрагмент при опциии совместного использования при
FileShare.None выведет в заголовок текст
Text="Файл не может быть открыт дважды.";
а при FileShare.ReadWrite для обоих методов Open (оция может быть только одна
и таже)
Text="Файл открыт дважды.";
CreateText(string path) создает файл, который будет
открыт для запии. Метод возвращает объект типа StreamWriter,
который может быть использован для записи текста в файл.
Исключение возникает если диск закрыт для записи.
private void button1_Click(object sender, System.EventArgs e)
{
//Символ @ блокирует использование косой черты
//как маркера начала спецсимвола
string path = @"c:\a.txt";
//Метод Exists - проверяет наличие файла
if(!File.Exists(path))
{
//Создаем файл и объект streamwriter, который будет
//существовать до закрытия фигурной скобки
using(StreamWriter streamwriter = File.CreateText(path))
{
streamwriter.WriteLine("Строка 1");
streamwriter.WriteLine("Строка 2");
streamwriter.WriteLine("Строка 3");
}
}
}
OpenText(string path) используется для открытия существующего
текстового файла и создания объекта типа StreamReader:
private void button2_Click(object sender, System.EventArgs e)
{
using(StreamReader streamreader = File.OpenText(path))
{
string sString = "";
while((sString = streamreader.ReadLine()) != null)
{
richTextBox1.AppendText(sString+"\r\n");
}
}
}
На данном этапе можно запустить приложение с кодами обработчиков
для кнопки 2 и одного из предыдущих пунктов для кнопки 1 и убедиться
в действенности методов.
AppendText(string path) создает объект типа StreamWriter,
который можно использовать для добавления текта в кодировке UTF-8
в конец фйла. Добавим код добавления строк в конец фала к коду
обработчика нажатия кнопки 1, код обработчика для кноки 2 оставим прежним
и убедимся в действенности метода, выполнив приложение:
private void button1_Click(object sender, System.EventArgs e)
{
//Символ @ блокирует использование косой черты
//как маркера начала спецсимвола
string path = @"c:\a.txt";
//Метод Exists - проверяет наличие файла
if(File.Exists(path))
{
//Удаляем старый файл
File.Delete(path);
}
if(!File.Exists(path))
{
//Создаем файл и объект streamwriter, который будет
//существовать до закрытия фигурной скобки
using(StreamWriter streamwriter = File.CreateText(path))
{
streamwriter.WriteLine("Строка 1");
streamwriter.WriteLine("Строка 2");
streamwriter.WriteLine("Строка 3");
}
}
using(StreamWriter streamwriter = File.AppendText(path))
{
streamwriter.WriteLine("Строка 4");
streamwriter.WriteLine("Строка 5");
streamwriter.WriteLine("Строка 6");
}
}
void Copy(string sourepath,string destpatch,bool overwrite)
- копирует существующий файл по новому адресу. При overwrite=false
перезапись файла при его наличии не происходит.
void Move(string sourepath,string destpatch)
- переносит существующий файл по новому адресу.
Примеры использования методов Copy и Move:
private void button1_Click(object sender, System.EventArgs e)
{
//Создание пустой файла - ожно без Using, но тогда надо закрыть поток
FileStream filestream=File.Create("C:\\a.txt");
//Зкрыть - иначе файл заблокирован
filestream.Close();
//Или так
//using(FileStream filestream=File.Create("C:\\a.txt")){}
//Переноc файла a.txt в b.txt
File.Move("C:\\a.txt","C:\\b.txt");
//Проверка существования файла
if(File.Exists("C:\\b.txt"))
{
// Копирование файла
File.Copy("C:\\b.txt","C:\\d.txt");
// Удаление файла
File.Delete("C:\\b.txt");
}
}
SetAttributes(string path,FileAttributes); и
GetAttributes(path) - позволяют установить и получить
значение атрибутов файлов.
Атрибуты файлов имеют тип FileAttributes. Структура типа - набор
бит (например двоичные значения для ReadOnly - 1, Hidden - 2,
System - 4 и т.д.). Возможны следующие значения атрибутов:
Archive - файл готов к архивированию или к удалению;
Compressed - упакованный файл;
Device - резерв, пока не используется;
Directory - каталог;
Encrypted - файл зашифрован;
Hidden - скрытый файл;
Normal - у файла не установлены никакие атрибуты;
NotContentIndexed - файл не индексируется системой
Windows Indexing System;
Offline - содержимое файла не доступно в режиме офлайн;
ReadOnly - только для чтения;
ReparsePoint - файл содержит блок данных, ассоциированных с файлом или каталогом;
SparsePoint - файл содержит большой объем пустых данных;
System - файл операционной системы или используется ОС.
Temporary - файл является временным файлом, созданным
либо операционной системой, либо какой либо программой.
Следующий код показывает основные возможности по работе с атрибутами:
private void button1_Click(object sender, System.EventArgs e)
{
//Создание пустой файла
string path=@"C:\a.txt";
if (!File.Exists(path))
{
File.Create(path);
}
//Выставляем атрибут
File.SetAttributes(path, FileAttributes.ReadOnly);
//Добавляем атрибут
File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden);
//Логическое умножение - оставляем один атрибут Hidden для сравнения
if((File.GetAttributes(path) & FileAttributes.Hidden) == FileAttributes.Hidden)
{
//Оставляем только для чтения и архивный
File.SetAttributes(path,FileAttributes.Archive | FileAttributes.ReadOnly);
}
}
GetCreationTime(string path); GetCreationTimeUtc(string path);
GetLastAccessTime(string path); GetLastAccessTimeUtc(string path);
GetLastWriteTime(string path); GetLastWriteTimeUtc(string path);
SetCreationTime(string path); SetCreationTimeUtc(string path);
SetLastAccessTime(string path); SetLastAccessTimeUtc(string path);
SetLastWriteTime(string path); SetLastWriteTimeUtc(string path);
методы для установки и чтения временных параметров файлов.
Методы устанавливают или читают дату и время в формате DateTime,
например:
DateTime datetime=File.GetCreationTime(path);
Text=datetime.Date.ToString();
В начало
Параграф 3 Класc Path и работа с файлами
Класс Path содержит набор статических методов, используемых для
обработки имен файлов. Рассмотрим основные методы и свойства класса:
GetFileName(string path) - возвращает имя файла вмете с расширением,
но без пути;
private void button1_Click(object sender, System.EventArgs e)
{
//Создание пустой файла
string path=@"C:\a.txt";
if(!File.Exists(path))
{
File.Create(path);
}
Text=Path.GetFileName(path);
В заглавии окна будет выведено "a.txt".
GetFileNameWithoutExtension(string path) - возвращает имя файла
без расширения и без пути.
Следующая строка в коде примера выведет "a"
Text=Path.GetFileNameWithoutExtension(path);
GetExtension(string path) - возвращает расширение имени файла.
Следующая строка в коде примера выведет ".txt"
Text=Path.GetExtension(path);
GetFullPath(string path) - возвращает полное имя файла;
Следующая строка в коде примера выведет "C:\a.txt".
Text=Path.GetFullPath(path);
GetPathRoot(string path) - возвращает корневой каталог для заданного файла.
Следующая строка в коде примера выведет "C:\".
Text=Path.GetPathRoot(path);
GetDirectoryName(string patch) - возвращает имя каталога
для указанного файла.
Следующая строка в коде примера выведет "C:\".
Text=Path.GetDirectoryName(path);
GetTempFileName() - возвращает уникальное имя
временного файла и создает файл нулевой длины с данным именем,
например:
C:\DOCUME~1\root\LOCALS~1\Temp\tmpA.tmp
HasExtension(string path), IsPathRooted(string path) -
методы прверки наличия расширения и корневого каталога соответственно
в имени файла, например:
GetTempPath() - возвращает маршрут к
каталогу Temp пользователя.
C:\DOCUME~1\root\LOCALS~1\Temp\
ChangeExtension(string, string) - этот метод
используется для того, чтобы изменить расширение
имени файла, и возвращает результат в виде строки с полным именем
файла и новым расширением, например cледующая строка в коде
примера выведет C:\a.doc
richTextBox1.Text=Path.ChangeExtension(path, ".doc");
Combine(string patchdir, string pathfile) - метод
объединяет два имени и возвращает результат в виде переменной
типа string, например cледующие строки в коде примера дадут C:\1\b.txt:
string path=@"C:\";
string path1=@"1\b.txt";
richTextBox1.Text=Path.Combine(path,path1);
Свойства DirectorySeparatorChar, AltDirectorySeparatorChar,
InvalidPathChars, PathSeparator, VolumeSeparatorChar показывают
символы разделители соответственно для директорий - DirectorySeparatorChar,
альтернативный для директорий - AltDirectorySeparatorChar,
платформа-определенный массив символов, которые не могут быть
определены в параметрах строки пути - InvalidPathChars,
платформа-определенный символ разделителя для строк пути в переменных
окружения - , платформа-определенный символ разделителя для тома -
VolumeSeparatorChar(двоеточие для Windows и Macintosh, наклонная
черте вправо на Unix).
Следущий код поможет посмотреть значения всех перечисленных свойств:
private void button1_Click(object sender, System.EventArgs e)
{
richTextBox1.Text=
"AltDirectorySeparatorChar "+
Path.AltDirectorySeparatorChar.ToString()+"\r\n"+
"DirectorySeparatorChar "+
Path.DirectorySeparatorChar.ToString()+"\r\n"+
"VolumeSeparatorChar "+
Path.VolumeSeparatorChar+"\r\n"+
"PathSeparator "+
Path.PathSeparator+"\r\n"+
"InvalidPathChars[] ";
string sString=Path.InvalidPathChars.ToString();
for(int i=0; i < sString.Length;i++)
richTextBox1.Text+=Path.InvalidPathChars[i].ToString();
}
Результат:
AltDirectorySeparatorChar /
DirectorySeparatorChar \
VolumeSeparatorChar :
PathSeparator ;
InvalidPathChars[] "<>|¶§
Ряд символов отобразились как нечитаемые - это для Windows
символ возврата на один символ (\b),символ пустого указателя (\0), и символы
Unicode от 16 до 18 и от 20 до 25.
В начало
Параграф 4 Класcы FileSystemInfo и FileInfo и работа с файлами
Класс FileInfo наследник абстрактного класса FileSystemInfo
используется для создания, копирования, удаления, перемещения, и
открытия файлов, и при использовании ряда методов
создает объекты типа FileStream.
Класcы FileSystemInfo содержит свойства и методы, общие
для управления файлами и директориями. Перечислим их:
Attributes- свойство которое может быть использовано
для установки или получения атрибутов файла. Подробно значения
атрибутов были рассмотрены выше.
Следующий код показывает основные возможности по работе с атрибутами:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
//Создаем файл пока известным нам способом
if(!File.Exists(path))
{
File.Create(path);
}
richTextBox1.Text="";
//Создаем экземпляр класса FileInfo для файла
FileInfo fileinfo = new FileInfo(path);
//Смотрим с какими атрибутами по умолчанию создан файл
richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\t";
//Добавляем атрибут Hidden
fileinfo.Attributes=fileinfo.Attributes | FileAttributes.Hidden;
richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\n";
//Если есть у файла атрибут Hidden
if((fileinfo.Attributes & FileAttributes.Hidden)
== FileAttributes.Hidden)
{
//Убираем все атрибуты
fileinfo.Attributes= fileinfo.Attributes & FileAttributes.Normal;
richTextBox1.Text+=fileinfo.Attributes.ToString()+"\r\n";
}
Результат:
Archive
Hidden, Archive
Normal
Exists - свойство используется для проверки существования файла.
string path = @"C:\b.txt";
FileInfo fileinfo = new FileInfo(path);
if(!fileinfo.Exists) Text="Файл не существует";
Delete() - метод позволяет удалить файл.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
//Создаем файл пока известным нам способом
using(FileStream filestream=File.Create(path)){}
//Создаем экземпляр класса
FileInfo fileinfo = new FileInfo(path);
if(fileinfo.Exists)
{
richTextBox1.Text+="Здесь файл существует \r\n";
}
fileinfo.Delete();
fileinfo = new FileInfo(path);
if(!fileinfo.Exists)
{
richTextBox1.Text+="А здесь уже не существует";
}
}
CreationTime, LastAccessTime, LastWriteTime - свойства
типа DateTime используются для получения или изменения даты создания
файла, даты последнего доступа или последней записи в файл соответственно.
Например:
richTextBox1.Text+=fileinfo.LastAccessTime.ToString();
//Текст в RichTextBox
21.09.2004 14:33:37
Name, FullName, Extension - свойства, используемые для
получения имени файла без имени пути, имени файла с именем пути и
расширения файла (соответственно для последнего примера "a.txt",
"C:\a.txt" и ".txt").
Класс FileInfo добавляет дополнительные методы для работы с файлами:
Create() - метод используется для создания файла.
Метод возвращает объект типа FileStream;
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
using(FileStream filestream=fileinfo.Create()){}
}
Информацию в созданный файл можно записать аналогично как это
делалось выше с использованием FileStream. В приведенном ниже
коде показано также как записать текст в русской кодировке c
использованием System.Text.Encoding.Default.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
using(FileStream filestream=fileinfo.Create())
{
string sString = "Текст, который будет записан в файл";
Byte[] bText = System.Text.Encoding.Default.GetBytes(sString);
int iByteCount = System.Text.Encoding.Default.GetByteCount(sString);
filestream.Write(bText,0,iByteCount);
}
//Просмотрим записанный текст в TextBox
System.IO.StreamReader streamReader;
streamReader = new System.IO.StreamReader(path,
System.Text.Encoding.Default);
textBox1.Text = streamReader.ReadToEnd();
streamReader.Close();
}
MoveTo(string pathdest) - метод используется для
переименования или перемещения файла. Метод вызывает прерывание
ввода вывода при отсутствии файла источника и при наличии файла
адресата. Приведенный далее код выдаст сообщение 1 при
отсутствии файла "a.txt" и сообщение 2 при наличии файла
"b.doc":
private void button1_Click(object sender, System.EventArgs e)
{
string path1 = @"C:\a.txt";
string path2 = @"C:\b.doc";
FileInfo fileinfo = new FileInfo(path1);
try
{
fileinfo.MoveTo(path2);
}
catch (IOException ex)
{
textBox1.Text="Ошибка переноса файла "+ex.Message;
}
catch (Exception ex)
{
textBox1.Text=ex.ToString();
}
}
Сообщения:
//Сообщение 1
Ошибка переноса файла: Unable to find the specified file.
//Сообщение 2
Ошибка переноса файла: Невозможно создать файл,
так как он уже существует.
CopyTo(string pathdest), или CopyTo(string pathdest,boolean rewrite)
- используются для копирования существующего файла в новый файл. Метод вызывает прерывание
ввода вывода (в приведенном ниже коде) при отсутствии файла источника
(сообщение 1) и при наличии файла адресата и переменной rewrite=false
или при использовании функции с одним параметром (сообщение 2) и
не вызывает прерывания при rewrite=true.
private void button1_Click(object sender, System.EventArgs e)
{
string path1 = @"C:\a.txt";
string path2 = @"C:\b.doc";
FileInfo fileinfo = new FileInfo(path1);
try
{
fileinfo.CopyTo(path2,true);
}
catch(IOException ex)
{
textBox1.Text="Ошибка копирования файла "+ex.Message;
}
catch (Exception ex)
{
textBox1.Text=ex.ToString();
}
}
Сообщения:
//Сообщение 1
Ошибка копирования файла Could not find file "C:\a.txt".
//Сообщение 2
Ошибка копирования файла The file "C:\b.doc" already exists.
Open(FileMode mode); Open(FileMode mode,FileAccess acces);
Open(FileMode mode,FileAccess acces,FileShare share); -
методы открывают файл и возвращают объект типа FileStream;
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
FileStream filestream1,filestream;
using(filestream=fileinfo.Open(FileMode.OpenOrCreate,FileAccess.Read,FileShare.Read))
{
try
{
using(filestream1=fileinfo.Open(FileMode.OpenOrCreate,FileAccess.Read,FileShare.Read)){}
textBox1.Text="Файл открыт дважды при FileShare.Share";
}
catch (IOException ex)
{
textBox1.Text="Файл не может быть открыт дважды при FileShare.None";
}
catch (Exception ex)
{
textBox1.Text=e.ToString();
}
}
}
В данном примере показано, что если установить FileShare.None,
то файл нельзя будет открыть для совместного использования. При
других значениях можно. Далее с файлом можно работать - писать,
читать... аналогично как это делали в примере для метода Create.
OpenRead(FileMode mode,FileAccess acces,FileShare share),
OpenWrite(FileMode mode,FileAccess acces,FileShare share) - методы позволяют
создавать объекта FileStream с доступом к файлу только для чтения,
и с доступом к файлу как для чтения, так и для записи. Методы
аналогичны методу Open и так же как и у него функция перегружаемая и может иметь один,
два и три аргумента.
CreateText() - метод создает новый пустой файл и объект типа S
treamWriter, который может быть использован для записи в созданный текстовый файл новой
информации. Файл создается заново если файл и существует. Исключение возникает если
диск закрыт для записи.
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
using (StreamWriter streamwriter = fileinfo.CreateText())
{
streamwriter.WriteLine("Строка 1");
streamwriter.WriteLine("Строка 2");
streamwriter.WriteLine("Строка 3");
}
}
OpenText() - метод открывает текстовый файл для
чтения и создает объект StreamReader с кодировкой UTF8, который
можно использовать для чтения из существующего файла. Прерывание
вызывается, как и во всех методах открытия файла, только при
отсутствии открываемого файла или отсутствии доступа к файлу.
Дополнив предыдущий фрагмент кода следующими строками мы
выведем текст, который был введен в созданный файл, в контрол TextBox.
using(StreamReader streamreader = fileinfo.OpenText())
{
string sText = "";
while((sText = streamreader.ReadLine()) != null)
{
textBox1.Text+=sText+"\r\n";
}
}
AppendText() - метод открывает текстовый файл для
добавления строк и создает объект StreamWriter с кодировкой UTF8,
который используется для добавления строк. Прерывание
вызывается, как и во всех методах открытия файла. Пример использования:
private void button1_Click(object sender, System.EventArgs e)
{
string path = @"C:\a.txt";
FileInfo fileinfo = new FileInfo(path);
using(StreamWriter streamwriter = fileinfo.AppendText())
{
streamwriter.WriteLine("Строка 4");
streamwriter.WriteLine("Строка 5");
streamwriter.WriteLine("Строка 6");
}
}
Свойства Directory, DirectoryName, Length - свойства
возвращает объект, содержащий информацию о родительском каталоге,
полный маршрут к файлу и размер текущего файла (типа Long).
Еcли Вы пришли с поискового сервера - посетите мою главную страничку
На главной странице Вы найдете программы комплекса Veles - программы для автолюбителей,
программу NumberPhoto, созданную для работы с фото, сделанными цифровым фотоаппаратом,
программу Локальный Web сайт - предназначенную для просмотра и прослушивания
файлов большинства графических и звуковых форматов в Web Browser,
программу Bricks - игрушку для детей и взрослых, программу записную книжку,
программу TellMe - говорящий Русско-Английский разговорник - программу для тех, кто собирается
погостить за бугром или повысить свои знания в английском, теоретический материал
по программированию в среде Borland C++ builder, C# (ASP.Net).
В начало страницы и главы
К началу раздела
На главную страницу
|