c语言写文件,偶尔写不进去?

wb+方式写文件,我看每次文件的创建时间都变了,说明每次都open成功了,但有的时候程序执行完毕,文件没有内容!这是什么原因?

如果像你所说,运行有能写入成功的时候。说明代码没出错。
那么就在写入方式上,wb+是新建二进制,已存在删除,允许读写。
那么如果文件无法删除,比如文本进程被引用之类,就影响执行。
简单说,你要用wb+,运行程序的时候,尽量不要对原文件进行其他操作。
或者你直接代码每次新建一个新的文件,不重名。追问

每次文件都重新生成了,可以看到文件的时间一直在改变,就是文件内容没有!

追答

你不是说,有写入成功的么?要是一次写入都没成功,那你肯定是写入代码有问题。fputs?fprintf?

追问

给你看我的代码

追答

我写了和你类似的代码,没问题,可以写入。

#include <stdio.h>
#include<time.h>
int main()
{
    FILE *fp=NULL;
    fp=fopen("c:\\test","wb+");
    if(fp)
    {
        fseek(fp, 0, SEEK_END);
        struct tm *tm=NULL;
        time_t rt=time(NULL);
        tm=localtime(&rt);
        fprintf(fp,"%4d-%2d-%2d %2d:%2d:%2d",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
        fclose(fp);
    }
    else
        printf("ERROR!\n");
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-26
、子程序不用写main函数。 2、每个程序只有一个main函数。(如果在类里看到了main函数那个不是通常意义上的main函数。只是一个名字叫做main的自定函数)。main函数会接受系统传入的参数。参数是固定的。(但是类里如果见到main函数,肯定是自己定义的参数)。
第2个回答  2019-03-26
文件fclose之前,先用fflush函数
fflush 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入追问

怀疑过这个,试过sync()方法不行,明天用你这个试试

还是不行

追答

我写文件,没遇到过这个问题,你可以把写入文件的相关代码,发出来看看,也许有别的问题

第3个回答  2019-03-26
我不知道你说的“写不进去”是怎么知道的。二进制文件是不是写进去了,要从文件中读出来看,直接打开的话有些数据是无法显示的,所以会被吴以为没有写进去。