| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: textfile.h
- // Purpose: interface of wxTextFile
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- // TODO: document wxTextBuffer
- /**
- The line termination type.
- */
- enum wxTextFileType
- {
- wxTextFileType_None, //!< incomplete (the last line of the file only)
- wxTextFileType_Unix, //!< line is terminated with 'LF' = 0xA = 10 = '\\n'
- wxTextFileType_Dos, //!< line is terminated with 'CR' 'LF'
- wxTextFileType_Mac, //!< line is terminated with 'CR' = 0xD = 13 = '\\r'
- wxTextFileType_Os2 //!< line is terminated with 'CR' 'LF'
- };
- /**
- @class wxTextFile
- The wxTextFile is a simple class which allows to work with text files on line by
- line basis. It also understands the differences in line termination characters
- under different platforms and will not do anything bad to files with "non
- native" line termination sequences - in fact, it can be also used to modify the
- text files and change the line termination characters from one type (say DOS) to
- another (say Unix).
- One word of warning: the class is not at all optimized for big files and thus
- it will load the file entirely into memory when opened. Of course, you should
- not work in this way with large files (as an estimation, anything over 1 Megabyte
- is surely too big for this class). On the other hand, it is not a serious
- limitation for small files like configuration files or program sources
- which are well handled by wxTextFile.
- The typical things you may do with wxTextFile in order are:
- - Create and open it: this is done with either wxTextFile::Create or wxTextFile::Open
- function which opens the file (name may be specified either as the argument to
- these functions or in the constructor), reads its contents in memory (in the
- case of wxTextFile::Open()) and closes it.
- - Work with the lines in the file: this may be done either with "direct
- access" functions like wxTextFile::GetLineCount and wxTextFile::GetLine
- (@e operator[] does exactly the same but looks more like array addressing)
- or with "sequential access" functions which include wxTextFile::GetFirstLine,
- wxTextFile::GetNextLine and also wxTextFile::GetLastLine, wxTextFile::GetPrevLine.
- For the sequential access functions the current line number is maintained: it is
- returned by wxTextFile::GetCurrentLine and may be changed with wxTextFile::GoToLine.
- - Add/remove lines to the file: wxTextFile::AddLine and wxTextFile::InsertLine
- add new lines while wxTextFile::RemoveLine deletes the existing ones.
- wxTextFile::Clear resets the file to empty.
- - Save your changes: notice that the changes you make to the file will @b not be
- saved automatically; calling wxTextFile::Close or doing nothing discards them!
- To save the changes you must explicitly call wxTextFile::Write - here, you may
- also change the line termination type if you wish.
- @library{wxbase}
- @category{file}
- @see wxFile
- */
- class wxTextFile
- {
- public:
- /**
- Default type for current platform determined at compile time.
- */
- static const wxTextFileType typeDefault;
- /**
- Default constructor, use Create() or Open() with a file name parameter to
- initialize the object.
- */
- wxTextFile();
- /**
- Constructor does not load the file into memory, use Open() to do it.
- */
- wxTextFile(const wxString& strFile);
- /**
- Destructor does nothing.
- */
- virtual ~wxTextFile();
- /**
- Adds a line to the end of file.
- */
- void AddLine(const wxString& str, wxTextFileType type = typeDefault);
- /**
- Delete all lines from the file, set current line number to 0.
- */
- void Clear();
- /**
- Closes the file and frees memory, @b "losing all changes".
- Use Write() if you want to save them.
- */
- bool Close();
- /**
- Creates the file with the name which was given in the
- wxTextFile(const wxString&) constructor.
- The array of file lines is initially empty.
- It will fail if the file already exists, Open() should be used in this case.
- */
- bool Create();
- /**
- Creates the file with the given name.
- The array of file lines is initially empty.
- It will fail if the file already exists, Open() should be used in this case.
- */
- bool Create(const wxString& strFile);
- /**
- Returns @true if the current line is the last one.
- */
- bool Eof() const;
- /**
- Return @true if file exists - the name of the file should have been specified
- in the constructor before calling Exists().
- */
- bool Exists() const;
- /**
- Returns the current line: it has meaning only when you're using
- GetFirstLine()/GetNextLine() functions, it doesn't get updated when
- you're using "direct access" functions like GetLine().
- GetFirstLine() and GetLastLine() also change the value of the current line,
- as well as GoToLine().
- */
- size_t GetCurrentLine() const;
- /**
- Get the line termination string corresponding to given constant.
- @e typeDefault is the value defined during the compilation and corresponds
- to the native format of the platform, i.e. it will be @c wxTextFileType_Dos
- under Windows and @c wxTextFileType_Unix under Unix (including Mac OS
- X, the value @c wxTextFileType_Mac was only used for classic Mac OS
- versions).
- */
- static const wxChar* GetEOL(wxTextFileType type = typeDefault);
- /**
- This method together with GetNextLine() allows more "iterator-like"
- traversal of the list of lines, i.e. you may write something like:
- @code
- wxTextFile file;
- ...
- for ( str = file.GetFirstLine(); !file.Eof(); str = file.GetNextLine() )
- {
- // do something with the current line in str
- }
- // do something with the last line in str
- @endcode
- */
- wxString& GetFirstLine();
- /**
- Gets the last line of the file.
- Together with GetPrevLine() it allows to enumerate the lines
- in the file from the end to the beginning like this:
- @code
- wxTextFile file;
- ...
- for ( str = file.GetLastLine();
- file.GetCurrentLine() > 0;
- str = file.GetPrevLine() )
- {
- // do something with the current line in str
- }
- // do something with the first line in str
- @endcode
- */
- wxString& GetLastLine();
- /**
- Retrieves the line number @a n from the file.
- The returned line may be modified when non-const method is used but you
- shouldn't add line terminator at the end -- this will be done by
- wxTextFile itself.
- */
- //@{
- wxString& GetLine(size_t n);
- const wxString& GetLine(size_t n) const;
- //@}
- /**
- Get the number of lines in the file.
- */
- size_t GetLineCount() const;
- /**
- Get the type of the line (see also wxTextFile::GetEOL).
- */
- wxTextFileType GetLineType(size_t n) const;
- /**
- Get the name of the file.
- */
- const wxString& GetName() const;
- /**
- Gets the next line (see GetFirstLine() for the example).
- */
- wxString& GetNextLine();
- /**
- Gets the previous line in the file.
- */
- wxString& GetPrevLine();
- /**
- Changes the value returned by GetCurrentLine() and used by GetFirstLine()
- and GetNextLine().
- */
- void GoToLine(size_t n);
- /**
- Guess the type of file (which is supposed to be opened).
- If sufficiently many lines of the file are in DOS/Unix/Mac format,
- the corresponding value will be returned.
- If the detection mechanism fails @c wxTextFileType_None is returned.
- */
- wxTextFileType GuessType() const;
- /**
- Insert a line before the line number @a n.
- */
- void InsertLine(const wxString& str, size_t n,
- wxTextFileType type = typeDefault);
- /**
- Returns @true if the file is currently opened.
- */
- bool IsOpened() const;
- /**
- Opens the file with the name which was given in the wxTextFile(const wxString&)
- constructor and also loads file in memory on success.
- It will fail if the file does not exist, Create() should be used in this case.
- The @a conv argument is only meaningful in Unicode build of wxWidgets when
- it is used to convert the file to wide character representation.
- */
- bool Open(const wxMBConv& conv = wxConvAuto());
- /**
- Opens the file with the given name and also loads file in memory on success.
- It will fail if the file does not exist, Create() should be used in this case.
- The @a conv argument is only meaningful in Unicode build of wxWidgets when
- it is used to convert the file to wide character representation.
- */
- bool Open(const wxString& strFile, const wxMBConv& conv = wxConvAuto());
- /**
- Delete line number @a n from the file.
- */
- void RemoveLine(size_t n);
- /**
- Change the file on disk.
- The @a typeNew parameter allows you to change the file format
- (default argument means "don't change type") and may be used to convert,
- for example, DOS files to Unix.
- The @a conv argument is only meaningful in Unicode build of wxWidgets when
- it is used to convert all lines to multibyte representation before writing
- them to physical file.
- @return
- @true if operation succeeded, @false if it failed.
- */
- bool Write(wxTextFileType typeNew = wxTextFileType_None,
- const wxMBConv& conv = wxConvAuto());
- /**
- The same as GetLine().
- */
- wxString& operator[](size_t n) const;
- };
|