Этот класс позволяет работать с текстовыми файлами построчно и понимает символ переноса строки для различных систем, позволяя преобразовывать файл из одной системы в другую.
Класс не позволяет работать с большими файлами (порядка 1 Мб и более), т.к. считывает содержимое всего файла в память, однако с небольшими файлами справляется хорошо.
Следующие константы идентифицируют тип перевода строки
enum wxTextFileType { wxTextFileType_None, // Файл из одной строки wxTextFileType_Unix, // строка заканчивается на 'LF' = 0xA = 10 = '\n' wxTextFileType_Dos, // 'CR' 'LF' wxTextFileType_Mac // 'CR' = 0xD = 13 = '\r' };
wxTextFile::GetEOL static const char* GetEOL(wxTextFileType type = typeDefault) const
Возвращает символы перевода строки по заданной константе. typeDefault значение определяемое на этапе компиляции и соответствует родному формату платформы, т.е. будет wxTextFileType_ Dos в ОС Windows, wxTextFileType_ Unix в Unix (включая Mac OS X при компиляции с помощью Apple Developer Tools) и wxTextFileType_ Mac в Mac OS (включая Mac OS X при компиляции с помощью CodeWarrior).
wxTextFile::GetLineType wxTextFileType GetLineType(size_ t n) const
Возвращает тип строки (см. также GetEOL).
wxTextFile::GuessType wxTextFileType GuessType() const
Угадывает тип файла (который должен быть открыт). Если достаточно большое количество строк файла имеют DOS/Unix/Mac формат, то возвращается соответствующее значение. Если механизм определения не срабатывает, то возвращается wxTextFileType_ None.
wxTextFile::wxTextFile wxTextFile() const wxTextFile(const wxString& strFile) const
Конструктор по умолчанию и конструктор. Используется в двухшаговом конструкторе (с Create или Open).
wxTextFile::~wxTextFile ~wxTextFile() const
Деструткор ничего не делает.
wxTextFile::Create bool Create() const bool Create(const wxString& strFile) const
Создает файл с заданным именем или с именем переданным в конструкторе. Массив строк файла в начале пустой.
В случае ошибки или если файл существует, необходимо использовать Open.
wxTextFile::Open bool Open(wxMBConv& conv = wxConvUTF8) const bool Open(const wxString& strFile, wxMBConv& conv = wxConvUTF8) const
Открывает файл по заданному имени или по имени заданному в конструкторе и в случае успеха загружает файл в память. Если файл отсутствует, то выдается ошибка и необходимо ипользовать Create для создания файла.
Аргумент conv имеет смысл только в уникодной сборке wxWidgets, когда он используется для конвертации файла в уникод.
wxTextFile::Clear void Clear() const
Удаляет все строки из файла и устанавливает значение номера текущей строки в 0.
wxTextFile::Exists bool Exists() const
Возвращает существует ли файл - имя файла должно быть указано в конструкторе до вызова Exists().
wxTextFile::IsOpened bool IsOpened() const
Возвращает был ли открыт файл.
wxTextFile::GetName const char* GetName() const
Возвращает имя файла.
wxTextFile::Close bool Close() const
Закрывает файл и освобождает использованую память, теряя все изменения. Для сохранения изменений необходимо использовать Write().
Пример (создает объект; если файл существует, то открывает его, иначе создает; после очищает):
wxTextFile file(wxT("file.txt")); if (file.Exists()) file.Open(); else file.Create(); file.Clear();
Для работы со строками можно использовать подход прямого доступа или последовательного доступа.
wxTextFile::GetLineCount size_t GetLineCount() const
Возвращает количество строк в файле.
wxTextFile::GetLine wxString& GetLine(size_t n) const
Возвращает строку под номером n из файла. Возвращаемая строка может быть модифицирована, но не следует добавлять символы окончания строки, т.к. wxTextFile сделает это самостоятельно.
wxTextFile::operator[] wxString& operator[](size_t n) const
То же самое, что и GetLine.
wxTextFile::GetFirstLine wxString& GetFirstLine() const
Этот метод вместе с GetNextLine() позволяет иттерационный способ прохождения по массиву строк. Возвращает первую строку файла и смещает указатель текущей строки.
wxTextFile::GetNextLine wxString& GetNextLine()
Возвращает следующую строку.
wxTextFile::Eof bool Eof() const
Возвращает является ли текущая строка последней.
Пример.
wxTextFile file; ... for ( str = file.GetFirstLine(); !file.Eof(); str = file.GetNextLine() ) { // работаем с текущей строкой в str } // работаем с последней строкой в str
wxTextFile::GetPrevLine wxString& GetPrevLine()
Возвращает предыдущую строку.
wxTextFile::GetLastLine wxString& GetLastLine()
Возвращает последнюю строку файла. Вместе с GetPrevLine позволяет проходить все строки файла в обратном порядке.
Пример.
wxTextFile file; ... for ( str = file.GetLastLine(); file.GetCurrentLine() > 0; str = file.GetPrevLine() ) { // работаем с текущей строкой в str } // работаем с первой строкой в str
wxTextFile::GetCurrentLine size_t GetCurrentLine() const
Возвращает номер текущей строки: функция имеет смысл только при использовании функций GetFirstLine()/GetNextLine(). Значение текущей строки не изменяется при использовании прямого доступа к строкам, например, функцией, GetLine(). GetFirstLine() и GetLastLine() также меняют значение текущей строки, как и GoToLine().
wxTextFile::GoToLine void GoToLine(size_t n) const
Меняет значение возвращаемое GetCurrentLine и используемое GetFirstLine()/GetNextLine().
wxTextFile::AddLine void AddLine(const wxString& str, wxTextFileType type = typeDefault) const
Добавляет строку в конец файла.
wxTextFile::InsertLine void InsertLine(const wxString& str, size_t n, wxTextFileType type = typeDefault) const
Вставляет строку перед строкой с номером n.
wxTextFile::RemoveLine void RemoveLine(size_t n) const
Удаляет строку с номером n из файла.
wxTextFile::Write bool Write(wxTextFileType typeNew = wxTextFileType_None, wxMBConv& conv = wxConvUTF8) const
Сохраняет файл на диске. Параметр typeNew позволяет изменить формат файла (значение по умолчанию --- не изменять) и может использоваться для конвертации, например, файлов DOS в Unix.
Параметр conv имеет смысл только для уникодовой сборки wxWidgets, когда он используется для конвертации всех строк в многобайтовое представление перед записью в физический файл.
В случае успешной записи возвращает true, в противном случае - false.