wxWidgets文件操作(二)wxTextFile
书上说有情人最终能成婵娟...不好意思,错了。
书上说wxTextFile也是一个很简易的类,允许以行为单位操作文件。该类也能轻松地区分不同平台下文件的行终止符,对于“非原生”的行终止符,它也不会对其做任何有害的动作--事实上,它也能在不同行终止符间进行转换,比如从Dos到Unix。
不过需要小小注意的是,该类对(超)大文件的操作并没有做性能优化处理,原因是它将整个文件一次完整读入到内存。所以你不应该用该类操作(超)大文件(超过1M)。另一方面,象配置文件及程序源代码这类小文件你大可放心地使用该类。
关于读写操作的具体用法,请见以下代码片断。需要留意的地方代码注释里都有说明,比如调用Write()方法前数据并未写入物理文件。
最后一句,使用wxTextFile需包含头文件<wx/textfile.h>
1 #include <wx/textfile.h>
2
3 void textfiletest()
4 {
5 //源文件:
6 wxTextFile file(wxT("helperapp.cpp"));
7
8 //创建新文件,下面将要把源文件copy给该新文件
9 wxTextFile dummyfile(wxT("dummy.cpp"));
10 dummyfile.Create();
11
12 file.Open();
13
14 //显示源文件总共有多少行:
15 cout<<"Number of lines:"<<file.GetLineCount()<<endl;
16
17 //打印第一行:
18 cout<<"First Line:"<<file.GetFirstLine().c_str()<<endl;
19
20 //打印最后一行:
21 cout<<"Last Line:"<<file.GetLastLine().c_str()<<endl;
22
23 cout<<"-------------------------------------------------------------"<<endl;
24
25 //完整打印源文件于控制台,同一时间copy 给新创建的dummyfile.cpp文件:
26 wxString code;
27 for(code=file.GetFirstLine();!file.Eof();code=file.GetNextLine())
28 {
29 //将源文件一行一行读取打印于控制台窗口
30 cout<<code.c_str()<<endl;;
31
32 //将源文件一行一行地copy给目标文件dummyfile.cpp
33 dummyfile.AddLine(code);
34 }
35 cout<<"--------------------------------------------------------------"<<endl;
36
37 //上面调用AddLine()方法并未将数据写入物理文件,所以一定要调用
38 //Write( wxTextFileType typeNew = wxTextFileType_None,
39 //const wxMBConv & conv = wxConvAuto() )方法,该方法调用成功时返回true.
40 if(dummyfile.Write(/*wxTextFileType_None,wxConvAuto(wxFONTENCODING_CP936 )*/))
41 cout<<"Done!New file created in the disk."<<endl;
42 dummyfile.Close();
43 file.Close();
44
45 }
2
3 void textfiletest()
4 {
5 //源文件:
6 wxTextFile file(wxT("helperapp.cpp"));
7
8 //创建新文件,下面将要把源文件copy给该新文件
9 wxTextFile dummyfile(wxT("dummy.cpp"));
10 dummyfile.Create();
11
12 file.Open();
13
14 //显示源文件总共有多少行:
15 cout<<"Number of lines:"<<file.GetLineCount()<<endl;
16
17 //打印第一行:
18 cout<<"First Line:"<<file.GetFirstLine().c_str()<<endl;
19
20 //打印最后一行:
21 cout<<"Last Line:"<<file.GetLastLine().c_str()<<endl;
22
23 cout<<"-------------------------------------------------------------"<<endl;
24
25 //完整打印源文件于控制台,同一时间copy 给新创建的dummyfile.cpp文件:
26 wxString code;
27 for(code=file.GetFirstLine();!file.Eof();code=file.GetNextLine())
28 {
29 //将源文件一行一行读取打印于控制台窗口
30 cout<<code.c_str()<<endl;;
31
32 //将源文件一行一行地copy给目标文件dummyfile.cpp
33 dummyfile.AddLine(code);
34 }
35 cout<<"--------------------------------------------------------------"<<endl;
36
37 //上面调用AddLine()方法并未将数据写入物理文件,所以一定要调用
38 //Write( wxTextFileType typeNew = wxTextFileType_None,
39 //const wxMBConv & conv = wxConvAuto() )方法,该方法调用成功时返回true.
40 if(dummyfile.Write(/*wxTextFileType_None,wxConvAuto(wxFONTENCODING_CP936 )*/))
41 cout<<"Done!New file created in the disk."<<endl;
42 dummyfile.Close();
43 file.Close();
44
45 }