我一直在网上搜索,实现如图所示的信息,但由于我不明白的原因,我无法让这个非常简单的代码工作.它应该是一个简单的健全检查.我正在使用FILE*来获得速度(速度是这里的优先级).一,变量......
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
//Declaration
int g = 1, dim_hi = 5, pop = 6;//variables I'll use to write to binary file
char OA = 'D';//variable I'll use to write to binary file
const short d_size = sizeof(double);
const short c_size = sizeof(char);
const short i_size = sizeof(int);
FILE * outFile;
int read_g = 0, read_dim = 0, read_pop = 0;//variables I'll use to READ from file
char read_oa ='a';//variable I'll use to READ from file
Run Code Online (Sandbox Code Playgroud)
接下来我写信给文件.据我所知(基于输出文件的大小)这段代码正常工作.我的意图是一个接一个地写三个整数和一个字符到文件...
//Binary File Output
outFile = fopen ("myfile.bin", "ab");
fwrite (&dim_hi , i_size, i_size, outFile);
fwrite (&pop , i_size, i_size, outFile);
fwrite (&g , i_size, i_size, outFile);
fwrite (&OA , c_size, c_size, outFile);
fclose (outFile);
Run Code Online (Sandbox Code Playgroud)
根据互联网,我应该有一个二进制包含值的文件:561D.但是,根据以下代码......
//Binary File Input
outFile = fopen ("myfile.bin", "rb");
fread ((void*)&read_dim , i_size, 1, outFile);
fread ((void*)&read_pop , i_size, 1, outFile);
fread ((void*)&read_g , i_size, 1, outFile);
fread (&read_oa , c_size, 1, outFile);
fclose (outFile);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意我也尝试过(char*)和read_dim,并且只是&read_dim.我得到的是:
read_dim = 5
read_pop = -858993460
read_g = -858993460
read_oa = 9 "
Run Code Online (Sandbox Code Playgroud)
我不明白.它是一个写入列表和一个读取列表.相同的系统等等.为什么写入不对应于读取?我已经阅读了有关填充的内容,但没有一个示例使用seekg(或FILE*的等效命令)对象在文件中移动.
有什么事情知道这段代码有什么问题吗?
一旦我用这个简单的测试来解决问题,我想做一些与矩阵行相似的事情(这个矩阵最终可能包含数万个元素)......
vector<vector<double> > depop(pop, vector<double> (dim_hi,0));
short v_size = dim_hi*d_size;
for(int i = 0; i < pop; i++)
{
fwrite (&depop[i] , d_size, v_size, outFile);
}
// followed by the read command...
Run Code Online (Sandbox Code Playgroud)
谢谢大家!
我读过的链接:
根据cplusplus.com,fwrite第三个参数是要写的元素数量,所以你应该:
fwrite (&dim_hi , i_size, 1, outFile);
fwrite (&pop , i_size, 1, outFile);
fwrite (&g , i_size, 1, outFile);
fwrite (&OA , c_size, 1, outFile);
Run Code Online (Sandbox Code Playgroud)
与您的验证呼叫匹配fread,因为i_size很可能大于1(典型大小为int4).
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |