C和F写入流!=无效的

C和F写入流!=无效的,c,C,我有一个程序,在他收到连接设备的事件后,他试图从中获取数据并保存在硬盘上,要保存的代码: FILE *fp_binary = fopen(appdata, "wb"); fwrite(buffer, sizeof(char), sizeof(buffer), fp_binary); fclose (fp_binary); 所以,当我运行此程序时,它工作正常,但如果我断开设备并再次连接: appdata是appdata文件夹的路径,文件名

我有一个程序,在他收到连接设备的事件后,他试图从中获取数据并保存在硬盘上,要保存的代码:

        FILE *fp_binary = fopen(appdata, "wb"); 

        fwrite(buffer, sizeof(char), sizeof(buffer), fp_binary); 

        fclose (fp_binary);
所以,当我运行此程序时,它工作正常,但如果我断开设备并再次连接:

appdata是appdata文件夹的路径,文件名始终不同 缓冲区被重新创建

@编辑

首次运行时: 第二次运行时:


您没有检查fp_binary=fopenappdata,wb的结果;以确保结果不为空。在尝试使用fp_二进制文件之前,您确实应该这样做。如果结果为空,则表示无法打开文件appdata进行写入;您需要使用if fp_binary==NULL{/*检查fp_binary是否为NULL显示错误消息并在此处恢复*/}。如果为空,则出现错误:无法打开文件进行写入。在这种情况下,您的代码将需要执行正确的恢复过程,可能只是退出。然后你必须调查它为什么不能打开文件。由于您尚未共享实际的文件名和路径名或有关文件的其他详细信息,我无法帮助您完成这一部分。在某些情况下,您可以调用的大多数函数可能会失败。I/O函数尤其属于这一类,与大多数其他函数相比,它们的故障可能无法根据程序的代码预测。您应该始终测试错误,并在错误发生时处理这些错误,即使只是通过显示诊断并退出。不要为此目的使用断言。它们用于测试条件,除非您的程序被破坏,否则您希望这些条件永远不会为假。好吧,我添加了:iffp_binary==NULL,它返回true,那么为什么会发生这种情况?@Carlos28:看看设置了什么errno,例如perrorappdata;。