C++ 函数将多余的空条目保存到文件中
c++ function saving extra empty entries to a file
我制作这个函数是为了修改二进制文件中现有条目上的一个特定字段。它确实可以完成它的工作,但也会在文件中添加另一个完整的条目,每个字段都在 0 中。关于可能导致这种情况的原因的任何想法?在我添加"modOk == false"验证之前,程序将添加多个条目而不是一个条目。
void option12(){
proyecto datos;
int id;
bool modOk=false;
system("cls");
cout << "Type project ID: ";
cin >> id;
FILE * p;
p = fopen("proyectos.tky","rb+");
if (p == NULL) perror ("Error opening file");
while(fread(&datos, sizeof datos, 1, p) == true && modOk == false){
if(id == datos.idPro && datos.estado == true){
system("cls");
cout << "Project found" << endl << endl;
cout << "Type new value: ";
cin >> datos.valor;
long bytes;
bytes = ftell(p) - sizeof datos;
fseek(p, bytes, SEEK_SET);
fwrite(&datos, sizeof datos, 1, p);
system("cls");
cout << "Data modified correctly" << endl;
modOk = true;
}
}
fclose(p);
if(modOk == false){
system("cls");
cout << "Project not found" << endl;
}
system("pause");
}
datos 是一个包含多个变量的结构:"idPro"包含一个自动分配的唯一编号。"estado"检查条目是否处于活动状态,而"valor"是IM尝试修改的值。
读/写操作应该用文件定位操作分隔(来自 fopen(3( 的手册页(。
在fwrite 行后添加一个fseek(p,0,SEEK_CUR);
以强制执行此操作。
此外,您应该将 fread 的返回值与 1 进行比较,而不是 true。
考虑到您的结构(proyecto(没有字节对齐,编译器可能会填充它。 如果是这样,请定义结构的预期大小并使用它而不是 sizeof(proyecto(
相关文章:
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 从函数角度看ID到文件路径的内部与外部映射
- 从 c 或 cpp 系列子函数返回到主函数
- C++ 函数将多余的空条目保存到文件中
- 将由结构构建的数组传递到将数据存储到文件中的函数
- 找不到构造函数 - 如何将 CPP 文件添加到 Qt 构建过程
- C :使用ARGV [1]到一个函数中读取.txt文件的错误
- Rcpp:将C++函数移植到 R 中,'Rcpp.h'找不到文件
- 将函数的std输出附加到文件中
- 通过神经网络中的函数将数据从 2D 数组保存到文件中
- C++二进制文件到结构函数
- c语言 - fprintf() 函数无法将数据保存到文件中;后面必须跟着 fflush() 函数吗?
- 使用函数将结构写入/读取到文件,Visual C++ 2008 express
- 如何在C++中从文件读取到构造函数
- 从二进制文件读取后,当控件返回到调用函数时,出现未处理的异常
- 通过头文件函数将遍历的数据从二进制搜索树加载到Vector中
- 如何将文本文件中的信息读取到构造函数内部的动态数组中
- 什么fstream写函数写到文件(编码在post)
- 从c++到C文件中定义的变量/函数的未定义引用