首页 C++文件操作
文章
取消

C++文件操作

总结一下利用C++进行文件操作的方法,包括文件的以及遍历文件目录

写文件

1
2
3
4
5
6
7
std::ofstream f2;
std::string dsoposefile = "./data/"+savefile_tail+"_dsopose.txt";
f2.open(dsoposefile,ios::out);
for(int i=0;i<100;++i){
    f2<<std::fixed<<std::setprecision(9)<<time_ref[i]<<" "<<i*3.3<<std::endl;//保留9位小数
}
f2.close();
  • ios::out写:文件不存在,则建立新文件,文件存在则直接清空文件内容。
  • ios::out|ios::app写追加:文件不存在,则建立新文件,文件存在则保留内容继续在末尾追加。

读文件

1
2
3
4
5
6
7
8
9
10
std::ifstream inf;
inf.open(timestampPath);
std::string sline;
std::getline(inf,sline);
while(std::getline(inf,sline)){
    std::istringstream ss(sline);
    double to_read;
    ss>>to_read;
}
inf.close();

上述代码实现读取文件的功能,ss>>to_readcin的效果一样。

遍历文件目录

需要头文件:dirent.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
inline int getdir (std::string dir, std::vector<std::string> &files)
{
    DIR *dp;
    struct dirent *dirp;
    if((dp  = opendir(dir.c_str())) == NULL)
    {
        return -1;
    }
    while ((dirp = readdir(dp)) != NULL) {
    	std::string name = std::string(dirp->d_name);

    	if(name != "." && name != "..")
    		files.push_back(name);
    }
    closedir(dp);

    std::sort(files.begin(), files.end());

    if(dir.at( dir.length() - 1 ) != '/') dir = dir+"/";
	for(unsigned int i=0;i<files.size();i++)
	{
		if(files[i].at(0) != '/')
			files[i] = dir + files[i];
	}
    return files.size();
}

函数调用和可得到目录dir下的全部文件名,保存在数组files中,可根据需要进行后续操作。

本文由作者按照 CC BY 4.0 进行授权