C/C++ 批量读取文件并写入多维数组中demo

参考:https://blog.csdn.net/leo_888/article/details/80681184

需要导入大批dat文件,一开始的想法是遍历然后获取文件夹下所有文件的名,代码如下。

获取全部文件的函数:

(这段代码网上都有,但后来发现这个函数获得的文件名并不是按原来的数字排列顺序,会影响后续的处理。)

void getFiles(string path, vector<string> &files) {

_int64 hFile = 0;     //注意编译器环境  x86环境需要改成 long hFile =0;

struct _finddata_t fileinfo;

string p;

if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {

do {

if ((fileinfo.attrib & _A_SUBDIR)) {

if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)

getFiles(p.assign(path).append("\\").append(fileinfo.name), files);

}

else {

files.push_back(p.assign(path).append("\\").append(fileinfo.name));

}

}

while (_findnext(hFile, &fileinfo) == 0);

_findclose(hFile);}}

下面这段代码是用C的库写的,可做参考。

主函数:

之后改变策略,因为事先知道文件名以及文件名的顺序,因此用sprint_f循环把文件名全都打出来存入vector<string>中,后续再循环打开文件进行处理。

char FileName[30] = { 0 };

vector <string> name;

for (int i = 1; i <= 1147; i++)

{

sprintf_s(FileName,sizeof(FileName), "Z://20171115//%d.dat", i);

name.push_back(FileName);

}


读取文件的方法

1. 直接读为一维数组:

vector<float> rawdata;

ifstream inf;

inf.open(name[0].c_str());

while (!inf.eof())

{

float temp;

inf >> temp;

rawdata.push_back(temp);


2.存为二维数组:

方法1(未实施测试):

vector<vector<int> > num;

while(getline(f, str))

{

istringstream input(str);

vector<int> tmp;

int a;

while(input >> a)

tmp.push_back(a);

num.push_back(tmp);

———————————————

方法二:

这个方法测试过,但是失败了我也不知道为啥,数据只能读进去第一行的。

//float(*data)[2048] = new float [280][2048]; (定义data[280]的类型为 float[2048] 此处开辟的空间是连续的)


方法三:

这个方法也测试过了,读取数据也失败了,很迷惑。

//  float ** data = new float* [2048];

//for (int i = 0; i < 280; ++i)

//{

// data[i] = new float[2048];

//}

//for (int i = 0; i < 280; ++i)

//{

// for (int j = 0; j < 2048; ++j)

// {

// data[i][j] = i * 2048 + j;

// }

//}

方法4:

(此方法可行)

static float data[280][2048] = { 0 };

ifstream inf;

inf.open(name[0].c_str());

while (!inf.eof())

{

for (int i = 0; i < 280; i++)

{

for (int ii=0;ii<2048;ii++)

{

inf>>data[i][ii];

}

}

}

return 0;

}


VC++中使用内存映射文件处理大文件  

https://www.cctry.com/thread-479-1-1.html

内存映射文件使用方法

https://www.cctry.com/thread-54602-1-1.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容