Главная :: Программы для программирования :: wxWidgets :: Классы wxWidgets :: wxTextFile
Хмурое утро, жена выгоняет интернетчика погулять с собакой. Он долго бродит с ней, потом поднимает палку, кидает ее и командует: - Э-э-э, Яндекс! То есть, Рамблер!! Тьфу, апорт!!!

wxTextFile

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

Класс не позволяет работать с большими файлами (порядка 1 Мб и более), т.к. считывает содержимое всего файла в память, однако с небольшими файлами справляется хорошо.

Подключение

#include "wx/textfile.h"

Тип строк

Следующие константы идентифицируют тип перевода строки

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.

Перевод: Ильдар Насибуллаев