十三、C++操作文件简介
2013-10-30 22:55
309 查看
1. ofstream类和ifstream类:
a. 前者用于写文件,后者用于读文件;
b. 打开文件都是利用其构造函数实现;
c. 其构造函数都一样,第一个参数是文件路径名(const char *),第二个参数表示打开模式,第三个参数表示文件的保护模式;
d. 几种常用的访问模式:
i. 都是以ios::作为前缀;
ii. out:以写方式打开,如果文件不存在则创建,如果文件存在则截断;
iii. trunc:即如果文件存在就截断,使用out模式时已经包含了该模式;
iv. nocreate:如果文件不存在则不创建文件,即打开失败;
v. in:以只读方式打开;
vi. app:追加方式写(不存在的话就创建,但是不会截断);
v. binary:以二进制方式打开文件,具体是读还是写要和其它模式进行组合;
组合时连接符仍然是按位与|;
e. 保护模式:
i. 均已filebuf::sh_作为前缀,表示的是一种共享模式,sh即share的缩写;
ii. compat:兼容共享;
iii. none:排他独占;
iv. read:读共享;
v. write:写共享;
f. 其中第二个参数的默认值对于ofstream来说是ios::out,对于ifstream俩说是ios::in,第三个参数两者的默认值都是file_buf::sh_compat、
2. 写文件示例(控制台测试程序):
3. 读文件示例(控制台测试程序):
4. 注意write和read的第一个参数:
i. write是const void *类型的,而read是void *类型的;
ii. 但是对于string类都没有定义过转换到这两种类型的方法,因此如果使用强制类型转换将是非常不安全的,将会丢失信息;
iii. 因此在使用这两个函数时还是使用最原始的字符数组作为中转;
a. 前者用于写文件,后者用于读文件;
b. 打开文件都是利用其构造函数实现;
c. 其构造函数都一样,第一个参数是文件路径名(const char *),第二个参数表示打开模式,第三个参数表示文件的保护模式;
d. 几种常用的访问模式:
i. 都是以ios::作为前缀;
ii. out:以写方式打开,如果文件不存在则创建,如果文件存在则截断;
iii. trunc:即如果文件存在就截断,使用out模式时已经包含了该模式;
iv. nocreate:如果文件不存在则不创建文件,即打开失败;
v. in:以只读方式打开;
vi. app:追加方式写(不存在的话就创建,但是不会截断);
v. binary:以二进制方式打开文件,具体是读还是写要和其它模式进行组合;
组合时连接符仍然是按位与|;
e. 保护模式:
i. 均已filebuf::sh_作为前缀,表示的是一种共享模式,sh即share的缩写;
ii. compat:兼容共享;
iii. none:排他独占;
iv. read:读共享;
v. write:写共享;
f. 其中第二个参数的默认值对于ofstream来说是ios::out,对于ifstream俩说是ios::in,第三个参数两者的默认值都是file_buf::sh_compat、
2. 写文件示例(控制台测试程序):
#include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { char pBuf[100]; memset(pBuf, 0, 100); ofstream out("M:\\Test Programs\\vim\\Test.txt"); for ( int i = 1 ; i <= 20 ; i++ ) { sprintf(pBuf, "Line %d\n", i); out.write(pBuf, strlen(pBuf));//所有write函数都是大同小异的 //第一个参数永远都是内存区,不管是写入到内存区还是从内存区提取 //后面必有一个参数表示要转存的字节数 } out.close(); return 0; }
3. 读文件示例(控制台测试程序):
#include <iostream> #include <fstream> using namespace std; int main() { ifstream in("M:\\Test Programs\\vim\\Test.txt"); //C++同样没有提供获取文件字节数的函数 //同样需要通过设置位置指针的方法获取文件字节数 //这不过这里的函数都成立ifstream类的成员方法而已 //所有函数名都去掉了f前缀(因为它们都是成员函数) //而在名称后面都加了一个g后缀,其表示位置指针的意思 //参考位置和C语言有所不同 //都是fstream类中定义的静态成员变量,只属于类而不属于对象 //都以ios::作为前缀 //beg表示begin,即文件头 //cur表示current,即当前位置指针的位置 //end表示文件尾 in.seekg(0, ios::end); int iFileLen = in.tellg(); int iBufLen = iFileLen + 1; in.seekg(0, ios::beg); char *pBuf = new char [iBufLen]; memset(pBuf, 0, iBufLen); in.read(pBuf, iFileLen); printf("%s", pBuf); in.close(); delete [] pBuf; pBuf = NULL; return 0; }
4. 注意write和read的第一个参数:
i. write是const void *类型的,而read是void *类型的;
ii. 但是对于string类都没有定义过转换到这两种类型的方法,因此如果使用强制类型转换将是非常不安全的,将会丢失信息;
iii. 因此在使用这两个函数时还是使用最原始的字符数组作为中转;
相关文章推荐
- 【c++笔记十三】c++中的输入、输出和文件操作
- 【c++笔记十三】c++中的输入、输出和文件操作
- C++文件简单的读写操作实例
- C++操作数据库写入到json配置文件中
- c++操作文件初体验,读写数据小例子
- C/C++ 文件操作
- C++中文件读操作
- Win32文件操作函数简介
- C++对文件的操作
- C++文件读写操作
- C/C++ 文件读写操作总结
- C/C++文件输入输出操作——FILE*、fstream、windowsAPI
- Win32汇编教程十三 INI 文件的操作
- c++文件常见操作示例
- c++中文件操作的5中基本途径
- 2015级C++第16周程序阅读 文件操作
- c++ 利用boost 实现文件操作
- C++的FSTREAM类提供的文件操作
- C++的File类文件操作
- C++ 文件IO操作 读写