鱼C论坛

 找回密码
 立即注册
查看: 3688|回复: 7

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

[复制链接]
发表于 2020-11-21 15:49:18 | 显示全部楼层 |阅读模式
10鱼币
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()这里报错了
IMG_20201121_154224.jpg
我该怎么办

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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                                           ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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盘的,后来改装到其他盘去了就可以了。老奇怪了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

可能是你对C盘没有获得写权限。
你得以管理员权限运行它。
如果安装了 Comodo之类的安全软件,还要将你写的这个程序添加到安全软件的白名单,允许它对系统分区进行写操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

平时的软件装到C盘,能读写C盘的文件啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-6 15:32:05 | 显示全部楼层
吃点饭饭 发表于 2020-12-6 15:19
平时的软件装到C盘,能读写C盘的文件啊

那就不知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-8 15:33:39 | 显示全部楼层
请问怎么发表悬赏帖子呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 10:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表