吃点饭饭 发表于 2020-11-21 15:49:18

打包安装程序之后运行程序文件操作报错

void f1()//读取数据
{
        fp = fopen("数据", "rb");
        fread(&stu, sizeof(struct Student),10, fp);
        fclose(fp);

}
void fsave()//保存数据
{

        fp = fopen("数据", "wb");
        fwrite(&stu, sizeof(struct Student), 10, fp);
        fclose(fp);
}
这个操作我在vs上面能完美运行,但我打包安装 运行之后在fsave()这里报错了

我该怎么办

jackz007 发表于 2020-11-21 17:13:01

本帖最后由 jackz007 于 2020-11-21 17:14 编辑

      添加打开文件状态判断代码试试:
int load(char fn[] , struct Student * stu)
{
      FILE * fp                                                ;
      if((fp = fopen(fn , "rb")) != NULL) {
                fread(stu , sizeof(struct Student) , 10 , fp)      ;
                fclose(fp)                                       ;
                return 1                                           ;
      } else {
                fprintf(stderr , "Cann't load the file %s\n" , fn) ;
                return 0                                           ;
      }
}

int save(char fn[] , struct Student * stu)
{
      FILE * fp                                                ;
      if((fp = fopen(fn , "wb")) != NULL) {
                fwrite(stu , sizeof(struct Student) , 10 , fp)   ;
                fclose(fp)                                       ;
                return 1                                           ;
      } else {
                fprintf(stderr , "Cann't save the file %s\n" , fn) ;
                return 0                                           ;
      }
}

吃点饭饭 发表于 2020-12-3 09:30:27

jackz007 发表于 2020-11-21 17:13
添加打开文件状态判断代码试试:

添加了之后,fp在这个写入操作的时候为NULL无法达到想要保存数据的效果
int save(char fn[] , struct Student * stu)
{
      FILE * fp                                                ;
      if((fp = fopen(fn , "wb")) != NULL)//条件成立
{
                fwrite(stu , sizeof(struct Student) , 10 , fp)   ;
                fclose(fp)                                       ;
                return 1                                           ;
      } else {
                fprintf(stderr , "Cann't save the file %s\n" , fn) ;
                return 0                                           ;
      }
}
开始是安装在C盘的,后来改装到其他盘去了就可以了。老奇怪了。

rt3 发表于 2020-12-5 17:44:37

吃点饭饭 发表于 2020-12-3 09:30
添加了之后,fp在这个写入操作的时候为NULL无法达到想要保存数据的效果

开始是安装在C盘的,后来改装 ...

可能是你对C盘没有获得写权限。
你得以管理员权限运行它。
如果安装了 Comodo之类的安全软件,还要将你写的这个程序添加到安全软件的白名单,允许它对系统分区进行写操作。

吃点饭饭 发表于 2020-12-6 15:19:04

rt3 发表于 2020-12-5 17:44
可能是你对C盘没有获得写权限。
你得以管理员权限运行它。
如果安装了 Comodo之类的安全软件,还要将你 ...

平时的软件装到C盘,能读写C盘的文件啊{:10_266:}

rt3 发表于 2020-12-6 15:32:05

吃点饭饭 发表于 2020-12-6 15:19
平时的软件装到C盘,能读写C盘的文件啊

那就不知道了

rt3 发表于 2020-12-8 14:38:41

本帖最后由 rt3 于 2020-12-8 18:23 编辑

用下面的函数代替原同名函数试试


#ifndef _ERRNO_H
    #include <errno.h>
#endif
int fsave(){//保存数据
      FILE* fp = fopen("数据", "wb");
      if(NULL==fp){
            printf("errno==%d",errno);
            return 3;
      }
      int b=fwrite(&stu, sizeof(struct Student), 10, fp);
      if(-1==b){
            printf("write failed.\n");
            return 2;
      }
      int c=fclose(fp);
      if(0==c){
            printf("close file succeed.\n");
            return 0;
      }else if(EOF==c){
            printf("close file failed.\n");
            return 1;
      }else{
            printf("unknown error.\n");
            return 4;
      }
}

1447391641 发表于 2020-12-8 15:33:39

请问怎么发表悬赏帖子呢
页: [1]
查看完整版本: 打包安装程序之后运行程序文件操作报错