Работа с текстовыми файлами. Работа с текстовыми файлами в Visual Basic

Совсем недавно в непомню какой коференции я видел запись какого-то человека, который просил, чтобы хоть кто-нибудь объяснил ему элементарную работу с файлами... Казалось бы такое простое... Но это простое для тех, кто уже хоть немного продвинулся в программировании, а кто это только начал? Это же, действительно, непроходимый лес! И я сильно сомневаюсь, чтобы кто-нибудь из других наших Web-мастеров когда-нибудь уделит этому хоть какое-то внимание. Поэтому этим займусь я и попробую в этой статье показать только основы.

1. Открытие файла для чтения информации из него.

Итак, чтобы безпроблемно работать с текстовыми файлами сначала их нужно открыть. Делается это с помощью оператора Open, например:

Open "c:\text.txt" For Input As #1

Обратите внимание на режим открытия файла - Input (для чтения). Здесь файл text.txt открывается для считывания под номером 1. Внимание!!! Номер файла - обязательный параметр, и вводить его нужно всегда! Если ваша программа будет иметь дело не с одним десятком открытых файлов, то уследить за их нумерацией будет сложновато. Используйте для этого функцию FreeFile. Она возвращает ещё не занятый номер (от 1 до 511) для файла:

Dim FileNum As Integer

FileNum = FreeFile

Так, файл открыли! Теперь из него нужно что-нибудь считать. Оператор Line Input считывает из открытого файла по одной строке при каждом вызове. Поэтому для считывания из файла нужно построить цикл, который бы вызывал этот оператор до тех пор, пока не дошёл бы до конца файла:

цикл выполняется, пока конец файла не достигнут

Do Until EOF(FileNum)

при каждом вызове оператора Line Input он записывает в

переменную новою строку

Line Input #FileNum, переменная

Закрыть открытый файл можно оператором Close #FileNum. А теперь вот как это должно выглядеть в практике:

Dim FileNum As Integer

Dim txt As String

Dim alltxt As String

FileNum = FreeFile

открываем файл в режиме чтения

Open "c:\text.txt" For Input As FileNum

запускаем вышеупомянутый цикл

Do Until EOF(FileNum)

считываем строку из файла с номером FileNum и кладём её в

переменную txt

Line Input #FileNum, txt

теперь к переменной alltxt добавляем содержимое переменной txt -

строки и vb-константу vbCrLf (Chr(13)+Chr(10)), т.к. каждая строка

должна быть с новой строки:-)

alltxt = alltxt + txt + vbCrLf

выводим содержимое переменной alltext

2. Открытие файла для записи информации в него.

Записать информацию в файл ещё проще!!! Эта операция отличается от предыдущей только тем, что открыть файл надо в режиме записи:

и вместо цикла нужно вставить оператор Print #, который записывает в файл содержимое переменной:

Print #FileNum, "Азбука Visual Basic"

Print #FileNum, alltext

Dim FileNum As Integer

Dim txt As String

FileNum = FreeFile

txt = "http://members.tripod.de/cmvb"

открываем файл в режиме записи

Open "c:\text.txt" For Output As FileNum

Print #FileNum, txt

закрываем файл с номером FileNum

Проверьте содержимое файла.

И ещё хочу предложить второй способ записи информации в файл - с помощью API-функции WritePrivateProfileStringByKeyName. Считывать же информацию нужно с помощью API-функции GetPrivateProfileString. Теперь расскажу - как всё это работает?

1.Создайте стандартный проект.

2.Введите модуль.

3.Удалите форму и кликните два раза по модулю.

4.В раздел General Declarations следующее объявление двух, вышеназванных функций:

Declare Function GetPrivateProfileString& Lib _

"kernel32" Alias "GetPrivateProfileStringA" (ByVal _

lpszSection$, ByVal lpszKey$, ByVal lpszDefault$, _

ByVal lpszReturnBuffer$, ByVal cchReturnBuffer&, _

ByVal lpszFile$)

lpszSection -имя секции

lpszKey - имя ключа

lpszDefault - значение, возвращаемое по умолчанию, при строке ""

lpszReturnBuffer - место для строки

cchReturnBuffer - размер (длина) места для строки

lpszFile - имя файла

Declare Function WritePrivateProfileStringByKeyName% Lib _

"kernel32" Alias "WritePrivateProfileStringA" (ByVal _

lpApplicationName As String, ByVal lpKeyName As String, _

ByVal lpString As String, ByVal lplFileName As String)

lpApplicationName - имя секции

lpKeyName - имя ключа

lpString - строка

lplFileName - имя файла

5.Создайте подпрограмму Main - просто введите Sub Main.

6.В подпрограмму Main введите:

создаём файл test.ini, в нём заголовок "Main", ключ "URL" _

и строку "http://members.tripod.de/cmvb"

Call WritePrivateProfileStringByKeyName("Main", "URL", _

"http://members.tripod.de/cmvb", "c:\test.ini")

создаём файл test.ini, в нём заголовок "Main", ключ "eMail" _

и строку "[email protected]"

Call WritePrivateProfileStringByKeyName("Main", "eMail", _

"[email protected]", "c:\test.ini")

При запуске проекта на диске С: тут же будет создан файл Test.ini со следующим содержимым:

URL=http://members.tripod.de/cmvb

[email protected]

создаём переменную, в которую будет передоваться строка

Dim MyString As String

"набиваем" её пробелами

MyString = Space(100)

записывается строка из заголовка "Main", ключа "URL"

Call GetPrivateProfileString("Main", "URL", "", MyString, _

Len(MyString), "C:\test.ini")

открывается файл файл test.ini, и в переменную MyString _

записывается строка из заголовка "Main", ключа "eMail"

Call GetPrivateProfileString("Main", "eMail", "", MyString, _

Len(MyString), "C:\test.ini")

выводится на экран содержимое переменной MyString

Работа с файловой системой

В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для работы с файловой системой компьютера, т.е для создания, удаления переноса и т.д. файлов и каталогов.

Первые два типа - Directory и Filе реализуют свои возможности с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов (экземпляров классов).

Следующие типы - DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.

Работа с каталогами

Абстрактный класс FileSystemInfo

Значительная часть членов FileSystemInfo предназначена для работы с общими характеристиками файла или каталога (метками времени, атрибутами и т. п.). Рассмотрим некоторые свойства FileSystemInfo:Свойство Описание

Attributes Позволяет получить или установить атрибуты для данного объекта файловой системы. Для этого свойства используются значения и перечисления FileAttributes

CreationTime Позволяет получить или установить время создания объекта файловой системы

Exists Может быть использовано для того, чтобы определить, существует ли данный объект файловой системы

Extension Позволяет получить расширение для файла

FullName Возвращает имя файла или каталога с указанием пути к нему в файловой системе

LastAccessTime Позволяет получить или установить время последнего обращения к объекту файловой системы

LastWriteTime Позволяет получить или установить время последнего внесения изменений в объект файловой системы

Name Возвращает имя указанного файла. Это свойство доступно только для чтения. Для каталогов возвращает имя последнего каталога в иерархии, если это возможно. Если нет, возвращает полностью определенное имя

В FileSystemInfo предусмотрено и несколько методов. Например, метод Delete() - позволяет удалить объект файловой системы с жесткого диска, a Refresh() - обновить информацию об объекте файловой системы.

Класс DirectoryInfo

Данный класс наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые предназначены для создания, перемещения, удаления, получения информации о каталогах и подкаталогах в файловой системе. Наиболее важные члены класса содержатся в следующей таблице:Член Описание

Create() CreateSubDirectory() Создают каталог (или подкаталог) по указанному пути в файловой системе

Delete() Удаляет пустой каталог

GetDirectories() Позволяет получить доступ к подкаталогам текущего каталога (в виде массива объектов DirectoryInfo)

GetFiles() Позволяет получить доступ к файлам текущего каталога (в виде массива объектов FileInfo)

MoveTo() Перемещает каталог и все его содержимое на новый адрес в файловой системе

Parent Возвращает родительский каталог в иерархии файловой системы

Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".". Например:

// Создаем объект DirectoryInfo, которому будет обращаться к текущему каталогу

DirectoryInfo dir1 = new DirectoryInfo(".");

// Создаем объект DirectoryInfo, которому будет обращаться к каталогу d:\prim

DirectoryInfo dir2 = new DirectoryInfo(@"d:\prim");

Если мы попытаемся создать объект DirectoryInfo, связав его с несуществующим каталогом, то будет сгенерировано исключение System.IO.DirectoryNotFoundException. Если же все нормально, то мы сможем получить доступ к данному каталогу. В примере, который приведен ниже, мы создаем объект DlrectoryInfo, который связан с каталогом d:\prim, и выводим информацию о данном каталоге:

using System.Text;

using System.IO;

namespace MyProgram

static void Main(string args)

Свойство Attributes позволяет получить информацию об атрибутах объекта файловой системы. Возможные значения данного свойства приведены в следующей таблице:Значение Описание

Archive Этот атрибут используется приложениями при проведении резервного копирования, а в некоторых случаях - удаления старых файлов

Compressed Определяет, что файл является сжатым

Directory Определяет, что объект файловой системы является каталогом

Encrypted Определяет, что файл является зашифрованным

Hidden Определяет, что файл является скрытым (такой файл не будет выводиться при обычном просмотре каталога)

Normal Определяет, что файл находится в обычном состоянии и для него установлены любые другие атрибуты. Этот атрибут не может использоваться с другими атрибутами

Offline Файл (расположенный на сервере) кэширован в хранилище off-line на клиентском компьютере. Возможно, что данные этого файла уже устарели

Readonly Файл доступен только для чтения

System Файл является системным (то есть файл является частью операционной системы или используется исключительно операционной системой)

Через DirectoryInfo можно не только получать доступ к информации о текущем каталоге, но получить доступ к информации о его подкаталогах:

static void printDirect(DirectoryInfo dir)

Console.WriteLine("***** "+dir.Name+" *****");

Console.WriteLine("FullName: {0}", dir.FullName);

Console.WriteLine("Name: {0}", dir.Name);

Console.WriteLine("Parent: {0}", dir.Parent);

Console.WriteLine("Creation: {0}", dir.CreationTime);

Console.WriteLine("Attributes: {0}", dir.Attributes.ToString());

Console.WriteLine("Root: {0}", dir.Root);

static void Main(string args)

DirectoryInfo dir = new DirectoryInfo(@"d:\prim");

printDirect(dir);

DirectoryInfo subDirects = dir.GetDirectories();

Console.WriteLine("Найдено {0} подкаталогов", subDirects.Length);

foreach (DirectoryInfo d in subDirects)

Метод CreateSubdirectory() позволяет создать в выбранном каталоге как единственный подкаталог, так и множество подкаталогов (в том числе, и вложенных друг в друга). Создадим в каталоге несколько дополнительных подкаталогов:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim");

dir.CreateSubdirectory("doc"); //создали подкаталог

dir.CreateSubdirectory(@"book\2008"); //создали вложенный подкаталог

Метод MoveTo() позволяет переместить текущий каталог по заданному в качестве параметра адресу. При этом возможно произвести переименование каталога. Например:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp");

dir.MoveTo(@"d:\prim\letter\bmp");

В данном случае каталог bmp перемещается в по адресу d:\prim\letter\bmp. Так как имя перемещаемого каталога совпадает с крайним правым именем в адресе нового местоположения каталога, то переименования не происходит. Следующий пример позволит нам переименовать текущий каталог:

DirectoryInfo dir = new DirectoryInfo(@"d:\prim\letter");

dir.MoveTo(@"d:\prim\archive");

Класс Directory

Работать с каталогами файловой системы компьютера можно и при помощи класса Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.

Рассмотрим работу с методами данного класса на примерах.

Directory.CreateDirectory(@"d:\prim\2008");//создали подкаталог 2008

Directory.Move(@"d:\prim\bmp",

@"d:\prim\2008\bmp");//перенесли каталог bmp в каталог 2008

Directory.Move(@"d:\prim\letter",

@"d:\prim\archives");//переименовали каталог letter в archives

Работа с файлами

Класс Filelnfo

Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению. Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов, который приведен в следующей таблице:Член Описание

AppendText() Создает объект StreamWriter для добавления текста к файлу

CopyTo() Копирует уже существующий файл в новый файл

Create() Создает новый файл и возвращает объект FileStream для взаимодействия с этим файлом

CreateText() Создает объект StreamWriter для записи текстовых данных в новый файл

Delete() Удаляет файл, которому соответствует объект FileInfo

Directory Возвращает каталог, в котором расположен данный файл

DirectoryName Возвращает полный путь к данному файлу в файловой системе

Length Возвращает размер файла

MoveTo() Перемещает файл в указанное пользователем место (этот метод позволяет одновременно переименовать данный файл)

Name Позволяет получить имя файла

Ореn() Открывает файл с указанными пользователем правами доступа на чтение, запись или совместное использование с другими пользователями

OpenRead() Создает объект FileStream, доступный только для чтения

OpenText() Создает объект StreamReader (о нем также будет рассказано ниже), который позволяет считывать информацию из существующего текстового файла

OpenWrite() Создает объект FileStream, доступный для чтения и записи

Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream, StreamWriter, StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него. Приемы работы с данными потоками нам уже известны. Поэтому рассмотрим другие возможности класса FileInfo.

using System.Text;

using System.IO; //для работы с файловым вводом-выводом

using System.Text.RegularExpressions;

namespace MyProgram

static void Main()

//создаем новый файл и связываем с ним строковый поток

FileInfo f = new FileInfo("text.txt");

StreamWriter fOut = new StreamWriter(f.Create());

//записываем в файл данные и закрываем строковый поток,

// при этом связь с физическим файлом для f не рвется

fOut.WriteLine("ОДИН ДВА ТРИ...");

//получаем информацию о файле

Console.WriteLine("*******"+f.Name File Inf+"**************");

Console.WriteLine("File size: {0}", f.Length);

Console.WriteLine("Creation: {0}", f.CreationTime);

Console.WriteLine("Attributes: {0}", f.Attributes.ToString());

Рассмотрим следующий пример:

static void Main()

FileInfo f = new FileInfo(@"d:\prim\letter\letter1.txt");

f.CopyTo(@"d:\prim\bmp\letter.txt");

f.MoveTo(@"d:\prim\archives\letter1.txt");

f = new FileInfo(@"d:\prim\letter\letter2.txt");

Рассмотрим еще один пример по удалению файлов:

static void printFile(FileInfo file)

Console.WriteLine("***** "+file.Name+" *****");

Console.WriteLine("File size: {0}", file.Length);

Console.WriteLine("Creation: {0}", file.CreationTime);

Console.WriteLine("Attributes: {0}", file.Attributes.ToString());

static void Main(string args)

DirectoryInfo dir = new DirectoryInfo(@"d:\prim\bmp");

FileInfo files = dir.GetFiles();

if (files.Length!=0)

Console.WriteLine("Найдено {0} файла", files.Length);

foreach (FileInfo f in files)

Console.WriteLine("\nТеперь в каталоге содержится {0} файлов и можно его удалить",

dir.GetFiles().Length);

Доступ к физическим файлам можно получать и через статические методы класса File. Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File.

static void Main(string args)

File.Copy(@"d:\prim\letter\letter1.txt",@"d:\prim\bmp\letter1.txt");

Directory.CreateDirectory(@"d:\prim\archives");

File.Move(@"d:\prim\letter\letter1.txt",@"d:\prim\archives\letter1.txt");

File.Delete(@"d:\prim\letter\letter2.txt");

Directory.Delete(@"d:\prim\letter");

Имеет прямой смысл использовать статический класс File, когда требуется осуществить единственный вызов метода на объект. В этом случае вызов будет выполнен быстрее, поскольку.NET Framework не придется проходить через процедуру создания экземпляра нового объекта с последующим вызовом метода. Однако если приложение осуществляет несколько операций над файлом, то более разумным представляется создать экземпляр объекта FileInfo и использовать его методы. Это позволит сэкономить определенное время, поскольку объект будет заранее настроен на нужный файл в файловой системе, в то время как статическому классу придется каждый раз осуществлять его поиск заново.

Аналогичное правило действует и при выборе между классами Directory и DirectoryInfo.

Как правило, настраиваемые параметры приложения хранятся во внешних по отношению к программе расположениях. Имеется множество способов вынести настройки программы вне кода самой программы. Распространёнными способами являются: хранение параметров приложения в реестре Windows, в базах данных, в конфигурационных XML файлах, в файлах *.config или *.cfg, в специфических двоичных форматах и, конечно же, в *.ini файлах. Эти файлы мы сейчас и рассмотрим.

1 Что такое INI-файлы

Что такое INI-файлы известно, наверное, каждому более-менее опытному пользователю операционной системы Windows. Зачастую файл с расширением *.INI - это самый быстрый и удобный способ вынести настраиваемые параметры приложения вне кода программы. Эти файлы имеют свою, довольно простую, структуру и, как правило, отличаются малыми размерами. Это обычные текстовые файлы, которые открываются даже в «Блокноте».

Вообще, INI-файл может иметь некоторые отступления от общепринятых норм, каждый разработчик определяет структуру и синтаксис файла для себя. Но есть некоторые общепринятые соглашения. Собственно, вот как выглядит структура INI-файла в общем виде:

; комментарий # комментарий в стиле Unix ; комментарий key1=value_1 key2=value_2 ;другой комментарий key3=value_3 ;ещё один комментарий key4=value_4

Видно, что *.INI файл может содержать:

  • комментарии;
  • заголовки разделов (секций);
  • параметры в виде пары «ключ-значение»;
  • пустые строки.

Пример INI-файла:

;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright сайт ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; height=600 width=800 lang=RU

2 Создание разделов и ключей INI-файла с помощью Visual Basic .NET и kernel32.dll

Можно изобретать велосипед и создать свой разборщик и генератор для INI-файлов. Но мы поступим более рационально и приземлённо и воспользуемся готовым решением из самой ОС Windows.

Дело в том, что в поставку любой операционной системы семейства Windows входит динамическая библиотека kernel32.dll . Эта библиотека расположена в системном каталоге Windows/system32 . Она имеет множество функций для доступа к API Windows. В том числе и для работы с INI-файлами. Описывать все его возможности нет смысла, т.к. их великое множество (вот, например, описание kernel32 на 500+ страниц). Посмотреть все методы библиотеки можно с помощью наших старых знакомых DllExportViewer или DependencyWalker .

Нас здесь интересуют всего два метода: GetPrivateProfileString() для чтения ключей и разделов INI-файлов и WritePrivateProfileString() для записи.

Напишем класс-обёртку для упрощённого доступа к функциям работы с файлами *.INI, предоставляемым библиотекой kernel32 :

Код класса IniFile.vb для работы с INI-файлами (разворачивается) Imports System.IO Imports System.Runtime.InteropServices Imports System.Text Namespace Ini Public Class IniFile #Region "ИМПОРТ DLL" """ """ Записывает ключ в заданный раздел INI-файла. """ """ Имя раздела. """ Имя ключа. """ Значение ключа. """ Путь к INI-файлу. Private Shared Function WritePrivateProfileString(ByVal section As String, ByVal key As String, ByVal value As String, ByVal filePath As String) As Long End Function """ """ Считывает ключ заданного раздела INI-файла. """ """ Имя раздела. """ Имя ключа. """ """ """ """ Путь к INI-файлу. """ С помощью конструктора записываем путь до файла и его имя. Private Shared Function GetPrivateProfileString(ByVal section As String, ByVal key As String, ByVal As String, ByVal retVal As StringBuilder, ByVal size As Integer, ByVal filePath As String) As Integer End Function #End Region "/ИМПОРТ DLL #Region "КОНСТРУКТОР" """ """ Имя файла. """ Private IniPath As String """ """ Читаем ini-файл и возвращаем значение указного ключа из заданной секции. """ """ Public Sub New(ByVal iniPath As String) Me.IniPath = New FileInfo(iniPath).FullName.ToString End Sub #End Region "/КОНСТРУКТОР #Region "МЕТОДЫ РАБОТЫ С INI-ФАЙЛАМИ" """ """ Проверяет, что заданный ключ существует в INI-файле. """ """ Имя раздела. """ Имя ключа. Public Function KeyExists(ByVal section As String, ByVal key As String) As Boolean Return (Me.ReadKey(section, key).Length > 0) End Function """ """ Читает значение заданного ключа в заданном разделе INI-файла. """ """ Имя раздела. """ Имя ключа. Public Function ReadKey(ByVal section As String, ByVal key As String) As String Dim retVal As New StringBuilder(&HFF) IniFile.GetPrivateProfileString(section, key, "", retVal, &HFF, Me.IniPath) Return retVal.ToString() End Function """ """ Создаёт заданный ключ в заданном разделе. Если раздел не существует, он будет создан. """ """ Имя раздела. """ Имя ключа. """ Значение ключа. Если NULL, то ключ будет удалён. Если String.Empty, то присвоится пустое значение. Public Sub WriteKey(ByVal section As String, ByVal key As String, ByVal value As String) IniFile.WritePrivateProfileString(section, key, value, Me.IniPath) End Sub """ """ Удаляет заданный ключ из заданного раздела INI-файла. """ """ Имя раздела. """ Имя ключа. Public Sub DeleteKey(ByVal section As String, ByVal key As String) Me.WriteKey(section, key, Nothing) End Sub """ """ Удаляет заданный раздел INI-файла. """ """ Имя раздела. Public Sub DeleteSection(ByVal section As String) Me.WriteKey(section, Nothing, Nothing) End Sub #End Region "/МЕТОДЫ РАБОТЫ С INI-ФАЙЛАМИ End Class End Namespace

Использовать класс IniFile можно, например, так:

Dim iniFile as New IniFile("config.ini") iniFile.WriteKey("SECTION1", "KEY1", "12345") If iniFile.KeyExists("SECTION1", "KEY1") MessageBox.Show("Ключ создан!") iniFile.DeleteKey("SECTION1", "KEY1") MessageBox.Show("Ключ удалён!") End If

Профессиональные окрашивающие средства для волос отличаются от обычных несколькими особенностями. Достоинства профессиональной продукции: более разнообразная палитра цветов - когда вы хотите получить в результате необычный и глубокий оттенок, стоит отдавать предпочтение профессиональным средствам; возможность подбора индивидуальной формулы - соотношение окислителя и красителя в разных красках может отличаться, и подбирать их нужно в зависимости от типа и других особенностей волос; обратимость процессов - если вам не понравится результат окрашивания, всегда можно […]

В свете последний событий, которые произошли у нас, мне теперь приходится думать не только о домашнем уюте, но и о безопасности. Да, раньше мы были до безобразия избалованные и совсем не думали о всякой там безопасности. Нет, ну на зачаточном уровне, конечно думали, но сейчас этот вопрос стал весьма-и-весьма актуальным. А что может повысить безопасность […]

В этой статье мы поговорим о работе с файлами. Научимся добавлять и удалять файлы/каталоги, записывать и читать данные из файла и.т.д.

Для работы с файлами в VB 2005 . Net используется пространство имён System .IO .

Для выполнения выше перечисленных операций с файлами используются классы File (System . IO . File ), FileInfo , FileStream , StreamReader , StreamWriter , BinaryReader , BinaryWriter .

Работаем с информацией о файле

В этом разделе нам понадобится класс File и методы GetAttributes , SetAttributes .

Для определения атрибутов файла используется метод GetAttributes , он имеет следующий синтаксис:

Function GetAttributes(ByVal path As String) As FileAttributes

Пример :

Dim FileInfo As System.IO.FileInfo

Dim File As System.IO.File

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

File.GetAttributes("MyFile.asp" )

End Sub

Path

Метод SetAttributes создан для установки атрибутов, имеет схожий синтаксис как для GetAttributes :

Sub SetAttributes (ByVal path As String , ByVal FileAttributes As FileAttributes)

Path – полный путь и имя + расширение файла

FileAttributes – Константа атрибута файла

Пример #1 :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

Таким образом, файлу MyFile . aspx устанавливается атрибут сжатого (Compressed )

System.IO.File.SetAttributes("MyFile.aspx" , IO.FileAttributes.Compressed)

End Sub

Пример #2:

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

‘Установили файлу атрибут архивный и сжатый.

System.IO.File.SetAttributes("Path" , IO.FileAttributes.Archive + IO.FileAttributes.Compressed)

End Sub

FileInfo позволяет брать любую информацию о фале.

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

Dim FileName As String = "C:\YourFile.txt"

Dim FileInfo As New System.IO.FileInfo(FileName)

FullFileName = FileInfo.FullName Узнали полное имя файла

‘Многие задают вопрос: «Как узнать существует файл в этом каталоге или нет? Как проверить существование файла?» Ответ ждёт вас ниже:

If FileInfo.Exists = True Then MsgBox("Файл существует" ) Else MsgBox("Файл не существует" )

End Sub

Свойствава класса FileName

Свойство

Тип свойства

Описание

Attributes

FileAttributes

Возвращает или устанавливает атрибуты файла

CreationTime

DataTime

Возвращает или устанавливает дату и время создания файла

Directory

String

Возвращает родительский каталог

DirectoryName

String

Возвращает полное имя родительского каталога

Exists

Boolean

Возвращает значение True в случае возвращения файла, иначе False

Extension

String

Возвращает расширение файла

FullName

String

Возвращает полный путь и имя файла

LastAccessTime

DataTime

Возвращает или устанавливает дату и время последнего обращения к файлу

LastWriteTime

DataTime

Возвращает или устанавливает дату и время последнего изменения файла

Length

Long

Возвращает размер файла в байтах

Name

String

Возвращает имя файла

Методы класса File , используемые для получения данных о файле

Метод

Описание

GetCreationTime

Возвращает дату и время создания файла

GetLastAccessTime

Возвращает дату и время последнего обращения к файлу

GetLastWriteTime

Возвращает дату и время последнего изменения данных в файле

SetCreationTime

Устанавливает дату и время создания файла

SetLastAccessTime

Устанавливает дату и время последнего обращения к файлу

SetLastWriteTime

Устанавливает дату и время последнего изменения данных в файле

Таблица атрибуттов файлов

Константа

Описание

Archive

Архивный файл

Compressed

Сжатый файл

Device

Устройство

Directory

Папка(Каталог)

Encrypted

Зашифрованный файл

Hidden

Скрытый файл

Normal

Нормальный файл (Без атрибутов)

NotContentIndexed

Не проиндексированный файл

OffLine

Данные о файле не доступны

ReadOnly

Только чтение файла

SparseFile

Разреженный файл(в основном это файлы большие по размеру, которые содержат много нулевых битов)

System

Системный файл

Temporary

Временный файл

Удаление, перемещение, копирование, создание, открытие файла

Для удаления файла можно воспользоваться методом Delete класса File .

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

System.IO.File.Delete("Path" )

End Sub

Path – полный путь и имя + расширение файла

Для перемещения файла можно использовать метод Move класса File .

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

System.IO.File.Move("Path1" ,"Path2" )

End Sub

Path 1 – Имя и путь перемещаемого файла

Path 2 – Новое имя и путь для перемещения файла

Для копирования файла можно воспользоваться методом Copy класса File

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

System.IO.File.Copy("Path1" , "Path2" )

End Sub

Path 1 – Имя и путь копируемого файла

Path 2 – Новое имя и путь для копируемого файла

Для создания файла используем метод Create класса File и для создания нового текстового файла метод CreateText класса File .

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

System.IO.File.Create("Path" )

System.IO.File.CreateText("Path" )

End Sub

Path – полный путь и имя + расширение файла

Для открытия файла используем метод Open класса File .

Режим доступпа к файлу

Режим

Описание

Append

Если файл существует, то открывает его и перемещает курсор в конец файла, если файл не существует, то создаёт новый. Этим режимом файл может быть открыт только для записи

Create

Создаёт новый файл. Если файл существует, то переписывает его(Данные из существующего файла удаляются!!!)

CreateNew

Создаёт новый файл. Если файл существует, то генерирует ошибку(Данные из существующего файла не стираются)

Open

Если файл существует, то открывает его,если не существует, то генерирует ошибку

OpenOrCreate

Если файл существует, то открывает его, елси не существует, то создаёт новый и открывает его

TrunCate

Если файл существует, то переписывает его(данные в существующем файле стираются). Файл открывается только для записи!!!

Пример :

Private Sub Form1_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me .Load

System.IO.File.Open("Path" ,mode,access)

End Sub

Path – полное имя файла

Mode – режим доступа к файлу

Access – тип доступа к файлу(Определяет характер операций с файлом (Чтение или запись данных). Принмает значение Read (Чтение файла), Write (Запись файла, измнение файла) и ReadWrite (Чтение и запись). Если не указывать это значение, то по умолчанию оно будет ReadWrite .

Заключение

Похожие публикации