文件操作系列之五——(CStdioFile的文件操作)

前面介绍了CFile类对文件的操作方式,本篇来介绍CStdioFile对文件的操作。

直接看这个类的源代码,我们可以发现,这个类是从CFile继承过来的。不过,CStdioFile的最大好处是他读写文件的方式是按照行来进行的。

当你把(0x0A)写入文件的时候,他会写入一对字符(0x0D, 0x0A),而当你读取的时候,他又给你把这一对字符转换成(0x0A)的单一字节。

虽然CStdioFile继承自CFile,但此处应该注意的是,CFile中的Duplicate, LockRange, UnlockRange三个函数在CStdioFile中不能使用。

下面直接上代码说明:

读文件:

char filename[50]; cout<<"Pleast input the file name you want to Read:/n"; cin>>filename; WCHAR wschar[50]; MultiByteToWideChar( CP_ACP, 0, filename, strlen(filename)+1, wschar, sizeof(wschar)/sizeof(wschar[0]) ); CStdioFile f1; if(!f1.Open(wschar, CFile::modeRead | CFile::typeText)) { TRACE(_T("Unable to open file/n")); } TCHAR readBuf[100]; while(f1.ReadString(readBuf, sizeof(readBuf)) != NULL) { wcout<<readBuf; }

写文件:

cout<<"Pleast input the file name you want to Write:/n"; char filename[50]; cin>>filename; WCHAR wschar[50]; MultiByteToWideChar( CP_ACP, 0, filename, strlen(filename)+1, wschar, sizeof(wschar)/sizeof(wschar[0]) ); //CStdioFile f2(stdout);//允许使用 stdin, stdout, or stderr try { CStdioFile f3( wschar, CFile::modeCreate | CFile::modeWrite | CFile::typeText ); cout<<"Please input the data you want to write:/n"; TCHAR inputData[100]; while(wcin>>inputData) { if (inputData[0] == 'q') { return; } f3.WriteString(inputData); } } catch(CFileException* pe) { TRACE(_T("File could not be opened, cause = %d/n"), pe->m_cause); pe->Delete(); }

CStdioFile的有缺点同样继承了CFile,但在某些情况下,当我们需要整行读写文件的时候,这时候CStdioFile也就成了最方便的方法了。

对于CStdioFile的具体描述和更多信息,可以参考MSDN上的详细说明。

  附,本系列示例代码 ,该代码在VS2008+XPsp3下测试通过。

你可能感兴趣的:(File,测试,null,input)