Главная :: Программы для программирования :: wxWidgets :: Классы wxWidgets :: Класс wxFile
Ваши руки выполнили недопустимую операцию и будут ампутированы

Класс wxFile

Этот класс является инструментом для работы с сырым файлом Ввода/Вывода. Этот небольшой класс разработан таким образом, чтобы минимизировать издержки его использнования - в самом же деле, никаких издержек нет, но использование его автоматически повлечет за собой проверку на ошибки и сгладит все различия между платформами и компиляторами. wxFile также автоматически закрывает файл в своем деструкторе, освобождая вас от необходимости беспокоиться о том, что вы забыли сделать это. wxFile содержит в себе файловый дескриптор - смотрите также wxFFile для изучения FILE структуры.

wxFileOffset используется функциями класса wxFile от параметра смещения при относительном методе адресации или возвращающими его. wxFileOffset также поддерживает родную для системы с 64-битной архитектурой адресацию данных.

Подключение

#include <wx/file.h>

Права доступа

Следующие константы определяют права доступа к файлу, используемые в wxFile::Create и wxFileOpen

 
#define wxS_IRUSR 00400
#define wxS_IWUSR 00200
#define wxS_IXUSR 00100

#define wxS_IRGRP 00040
#define wxS_IWGRP 00020
#define wxS_IXGRP 00010

#define wxS_IROTH 00004
#define wxS_IWOTH 00002
#define wxS_IXOTH 00001

// режим по умолчанию для новых файлов соответствует маске 022
#define wxS_DEFAULT  (wxS_IRUSR | wxS_IWUSR | wxS_IRGRP | wxS_IWGRP | wxS_IROTH | wxS_IWOTH)

В классе определены несколько режимов открытия файла. Их использование должно быть определено префиксом wxFile::

 
wxFile::read	//открывает файл для чтения или проверяет
				//может ли он быть открыт для чтения с использованием Access()

wxFile::write	//открывает файл для записи, удаляя при этом содержимое файла,
				//если он уже существует, или же проверяет может ли он быть открыт
				//для записи с использованием Access()

wxFile::read_write	//открывает файл для чтения или записи;
					//не может быть использован в Access()

wxFile::write_append	//открывает файл для дозаписи: файл открывается для записи,
						//но при этом содержимое файла не затирается, а указатель будет помещен 
						//в конец файла; не может быть использован в Access(). 
						//Тоже самое, что и wxFile::write, если файл не существует.
						
wxFile::write_excl	//открывет файл в сохранном режиме для записи (используя O_EXCL|O_CREAT).
					//Открытие не удастся, если файл уже существует, иначе же создаст 
					//и откроет файл автоматически. Полезно при открытии временных файлов
					//не будучи поддвержеными одновременному доступу.

Еще одна константа, определенная где-либо, но используемая функциями wxFile - wxInvalidOffset. Она выдает недопустимое значение типа wxFileOffset и возвращается функциями, возвращающими wxFileOffset как ошибку либо константы поиска, используемых с Seek():

wxFromStart		//считает смещение от начала фаила
wxFromCurrent	//считает смещение от текущего положения указателя
wxFromEnd		//считает смещение от конца файла(в обратном направлении)

Функции класса

 
wxFile::wxFile
wxFile()

Конструктор по умолчанию

 
wxFile(const char* filename, wxFile::OpenMode mode = wxFile::read)

Открывает файл в указанном режиме. Так как операция ничего не возвращает, то узнать успешным ли было ее выполнение можно с помощью вызова IsOpened.

 
wxFile(int fd)

Ассоциирует файл с заданным дескриптором файла,который уже открыт.

 
wxFile::~wxFile
~wxFile()

Деструктор закроет файл.

 
wxFile::Access
static bool Access(const char * name, OpenMode mode)

Эта функция проверяет, можем ли мы получить доступ к файлу в указанном режиме. Наиболее эффективно при использовании wxFile::read или wxFile::write.

 
wxFile::Attach
void Attach(int fd)

Закрепляет существующий дескриптор файла за wxFile объектом. Примером предписанного файлового дескриптора может служить 0, 1 или 2, соответствующие stdin, stdout и stderr (и имеют имена wxFile::fd_stdin , wxFile::fd_stdout и wxFile::fd_stderr).

Дескриптор должен быть уже открыт. Он будет закрыт объектом wxFile.

 
wxFile::Close
void Close()

Закрывает файл.

 
wxFile::Create
bool Create(const char* filename, bool overwrite = false, int access = wxS_DEFAULT)

Создает файл для записи. Если он уже существует, устанавливает overwrite в значение true, гарантируя его перезапись.

 
wxFile::Detach
void Detach()

Отделяет дескриптор файла от объекта wxFile - вызывающий ответственен за закрытие файла, если этот дескриптор открыт. IsOpened() вернет false после вызова Detach()

 
wxFile::fd
int fd() const

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

 
wxFile::Eof
bool Eof() const

Возвращает true, если достигнут конец файла.

 
wxFile::Exists
static bool Exists(const char* filename)

Возвращает истину, если заданное имя является именем существующего обычного файла(не директорией или ссылкой).

 
wxFile::Flush
bool Flush()

Сброс дескриптора файла.

Знайте, что wxFile::Flush не реализован на некоторовых виндовых компиляторах в силу отсутствия функции fsync, что само по себе уменьшает полезность использования этой функции(wxFile::Flush все-таки может быть вызвана, но на не поддерживающих ее компиляторах, она совершенно ничего делать не будет).

 
wxFile::GetKind
wxFileKind GetKind() const

Возвращает тип файла. Возможные значения:

 
enum wxFileKind
{
  wxFILE_KIND_UNKNOWN,
  wxFILE_KIND_DISK,     // файл, поддерживающий поиск условных смещений
  wxFILE_KIND_TERMINAL, // a tty - любой неителлектуальных терминал,
						// с которого может быть осуществлен доступ к рабочей станции
  wxFILE_KIND_PIPE      // a pipe - канал, служит для перенаправления 
						//потока вывода одной программы на вход другой
};
 
wxFile::IsOpened
bool IsOpened() const

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

 
wxFile::Length
wxFileOffset Length() const

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

 
wxFile::Open
bool Open(const char* filename, wxFile::OpenMode mode = wxFile::read)

Открывает файл в указанном режиме, возвращает истину, если операция прошла успешно.

 
wxFile::Seek
wxFileOffset Seek(wxFileOffset ofs, wxSeekMode mode = wxFromStart)

Установка головки чтения/записи в указанную позицию. Параметрами являются смещение, и то, откуда смещение считать. Возвращаемыми данными является фактическое достигнутое смещение, либо wxInvalidOffset, если ничего не вышло.

 
wxFile::SeekEnd
wxFileOffset SeekEnd(wxFileOffset ofs = 0)

Двигает файловый указатель на указанное число байт относительно конца файла. Например, SeekEnd(-5) передвинет указатель на 5 байт перед концом файла. Возвращает то же, что и wxFile::Seek.

 
wxFile::Tell
wxFileOffset Tell() const

Возвращает текущее положение указателя, либо wxInvalidOffset, если файл не открыт или какая-либо другая ошибка.

 
wxFile::Write
size_t Write(const void* buffer, size_t count)

Записывает указанное число байтов из буфера. Возвращает записанное количество байт.

 
wxFile::Write
bool Write(const wxString& s, wxMBConv& conv = wxConvUTF8)

Записывает содержимое строки в файл, возвращает иситну, если процедура была успешной.

Второй аргумент имеет значение лишь в Юникодных билдах wxWidgets, когда conv обычно переводит s в мультибайтовое представление.

Перевод: Сергей Воронков