Этот класс является инструментом для работы с сырым файлом Ввода/Вывода. Этот небольшой класс разработан таким образом, чтобы минимизировать издержки его использнования - в самом же деле, никаких издержек нет, но использование его автоматически повлечет за собой проверку на ошибки и сгладит все различия между платформами и компиляторами. wxFile также автоматически закрывает файл в своем деструкторе, освобождая вас от необходимости беспокоиться о том, что вы забыли сделать это. wxFile содержит в себе файловый дескриптор - смотрите также wxFFile для изучения FILE структуры.
wxFileOffset используется функциями класса wxFile от параметра смещения при относительном методе адресации или возвращающими его. wxFileOffset также поддерживает родную для системы с 64-битной архитектурой адресацию данных.
Следующие константы определяют права доступа к файлу, используемые в 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 в мультибайтовое представление.