为方便代码复用,这里贴上一些小程序。
c/c++推荐网站:
http://www.cppreference.com/wiki/start
推荐理由:查函数使用挺方便,内附可运行的代码片段
#include <stdio.h>
#include <new>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int read_file_list(string file_path, vector<string>& file_list) {
FILE *fp = fopen(file_path.c_str(), "rt");
if (fp == NULL) {
printf("open file %s fail\n", file_path.c_str());
return -1;
}
char file_name[500];
//while (fscanf(fp, "%s", file_name) != EOF)
while(fscanf(fp, "%[^\n]%*c", file_name) != EOF) //文件名含有空格不做截断
{
file_list.push_back(string(file_name));
}
fclose(fp);
return 0;
}
int read_file_binary(char* filename, char*& fileinfo, int& filelen){
FILE* pfile = fopen(filename, "rb");
if(NULL == pfile){
printf("file[%s] open fail\n", filename);
return -1;
}
fseek(pfile, 0, SEEK_END);
filelen = ftell(pfile);
rewind(pfile);
fileinfo = new (std::nothrow) char[filelen]; //new失败默认抛出异常bad_alloc,这里使用nothrow抑制异常的抛出
if(NULL == fileinfo){
printf("memory error\n");
return -2;
}
int res = fread(fileinfo, sizeof(char), filelen, pfile);
if(res != filelen){
printf("read file[%s] error\n", filename);
return -3;
}
fclose(pfile);
return 0;
}
int main(int argc, char** argv)
{
if(argc < 2){
printf("usage: exe filepath\n");
return 0;
}
//char* fileinfo;
//int filelen;
//int res;
//res = read_file_binary(argv[1], fileinfo, filelen);
vector<string> file_list;
int res = read_file_list(string(argv[1]), file_list);
if(0 != res){
printf("read file[%s] to memory fail\n", argv[1]);
return res;
}
//delete[] fileinfo;
system("pause");
return 0;
}
参考资料:
c++ new 失败的处理: https://www.cnblogs.com/avril/p/3175175.html
fscanf读取一行(空格不截断): https://blog.csdn.net/u011478505/article/details/25399721