2 qq 32681843 qq_32681843 于 2016.05.11 17:09 提问

c语言 文件 remove()函数出现permission denied

写了个程序,要删除E:\hugo.txt,确保文件已关闭,不是只可读,为什么仍然出现了permission denied,该怎么解决

6个回答

qq423399099
qq423399099   Ds   Rxr 2016.05.11 18:01
已采纳
 char path[]="E:\\";
strcat(path,user.userName);//user.userName为hugo
strcat(path,".txt");

你这样写会造成越界的,是不是覆盖到了什么,建议楼主单步调试,查看每一步的返回值
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

CSDNXIAON
CSDNXIAON   2016.05.11 17:12

Ubuntu 安装Qt Creator 后出现无法覆盖文件 /home/xxx/.config/Nokia/qtversion.xml : Permission denied
C 语言删除文件函数 remove()
Django 上传文件出现 OSError Permission denied的解决办法
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq423399099
qq423399099   Ds   Rxr 2016.05.11 17:28

你确信这个文件确实存在吗?是不是路径写错了,楼主最好贴点代码
你确定你是否有删除该文件的权限?
你确定这个文件在你的程序的另一个部分没有打开吗?

qq_32681843
qq_32681843   2016.05.11 17:31

代码:
int PrintOderpage()
{
char templater[100];
int moveway;
FILE *fp,*fp2;
//文件读写准备
char path[]="E:\";
strcat(path,user.userName);//user.userName为hugo
strcat(path,".txt");
fp=fopen(path,"r+");//读写形式打开文件
int ch;
int i=0;
while(1)
{
ch=fgetc(fp);
if(ch=='#')
{
break;
}

}
ch=fgetc(fp);
while(1)//文件里空格代表密码结束
{
    user.keyWord[i]=ch;
    i++;
    ch=fgetc(fp);
    if(ch==' ')
        break;
}
user.keyWord[i]='\0';                   //从文件读取用户密码
fclose(fp);

fp=fopen(path,"r+");//读写形式打开文件
fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
fscanf(fp,"%s",user.sex);
fscanf(fp,"%s",user.date);//此行过后指针指向购物信息的那一行
system("cls");
printf(">>>您的订单信息为:\n");
printf(">>>用户名: %s 用户性别: %s 用户生日: %s \n",user.userName,user.sex,user.date);
moveway=ftell(fp);//文件偏移36
fclose(fp);



system("pause");

 i=0;
 int price=0;
 while(i<BUYCAR.lenth)//计算总价
{
    price+=BUYCAR.good[i].price;
    i++;
}
printf("************************************************\n");
printf(">>>商品总价 : %d元\n",price);
char chioce;
printf(">>>您确认付款吗?(y/n):");
scanf(" %c",&chioce);
char keyword[15];
int flag=0;
                        //重写文件

    fp2=fopen("E:\\temp.txt","w+");//创建临时文件
    if(fp==NULL)
    {
        exit(0);
    }
    fp=fopen(path,"r");

while(flag==0)
{
        switch(chioce)
        {
            case 'y':
            case 'Y':
            i=0;
            while(1)
            {
                printf(">>>请输入用户%s的密码:",user.userName);
                i=0;
                char k;
                while((k=getch())!='\r')
                {
                    keyword[i]=k;
                    if(keyword[i]=='\b')
                    {
                        printf("\b \b");
                        i--;
                    }
                    else
                    {
                        printf("*");
                        i++;
                    }
                }
                keyword[i]='\0';
                i=0;//下标归零
                if(strcmp(user.keyWord,keyword)==0)
                {

                    printf(">>>订单打印中......\n");
                    Sleep(1000);


                    fread(templater,moveway,1,fp);//将购物信息之前的信息全部转移到temp文件

                    for(i=0;i<35;i++)//重写用户基本信息
                    {
                        fprintf(fp2,"%c",templater[i]);
                    }
                    i=0;

                    while(i<BUYCAR.lenth)
                    {
                        fprintf(fp2,"%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                        printf("%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                        i++;
                    }
                    printf(">>>订单打印成功\n");
                    system("pause");
                    flag=1;
                    break;
                }
                else
                {
                    printf(">>>密码输入错误!请重新输入\n");
                    continue;
                }


            }
            break;
        case 'n':
        case 'N':
            flag=1;
            break;
        default:
        printf(">>>输入错误,请重新输入\n");
        continue;

}

}

    fclose(fp);
    fclose(fp2);
    if(remove("E:\\hugo.txt")==0)
    {
        printf("remove success");
    }
    else
    {
        perror("remove");
    }

    rename("E:\\temp.txt","E:\\hugo.txt");

}


qq_32681843
qq_32681843   2016.05.11 17:32

重来一遍

 int PrintOderpage()
{
    char templater[100];
    int moveway;
    FILE *fp,*fp2;
    //文件读写准备
    char path[]="E:\\";
    strcat(path,user.userName);//user.userName为hugo
    strcat(path,".txt");
    fp=fopen(path,"r+");//读写形式打开文件
    int ch;
    int i=0;
    while(1)
    {
        ch=fgetc(fp);
        if(ch=='#')
        {
            break;
        }


    }
    ch=fgetc(fp);
    while(1)//文件里空格代表密码结束
    {
        user.keyWord[i]=ch;
        i++;
        ch=fgetc(fp);
        if(ch==' ')
            break;
    }
    user.keyWord[i]='\0';                   //从文件读取用户密码
    fclose(fp);

    fp=fopen(path,"r+");//读写形式打开文件
    fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
    fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
    fscanf(fp,"%s",user.sex);
    fscanf(fp,"%s",user.date);//此行过后指针指向购物信息的那一行
    system("cls");
    printf(">>>您的订单信息为:\n");
    printf(">>>用户名: %s 用户性别: %s 用户生日: %s \n",user.userName,user.sex,user.date);
    moveway=ftell(fp);//文件偏移36
    fclose(fp);



    system("pause");

     i=0;
     int price=0;
     while(i<BUYCAR.lenth)//计算总价
    {
        price+=BUYCAR.good[i].price;
        i++;
    }
    printf("************************************************\n");
    printf(">>>商品总价 : %d元\n",price);
    char chioce;
    printf(">>>您确认付款吗?(y/n):");
    scanf(" %c",&chioce);
    char keyword[15];
    int flag=0;
                            //重写文件

        fp2=fopen("E:\\temp.txt","w+");//创建临时文件
        if(fp==NULL)
        {
            exit(0);
        }
        fp=fopen(path,"r");

    while(flag==0)
    {
            switch(chioce)
            {
                case 'y':
                case 'Y':
                i=0;
                while(1)
                {
                    printf(">>>请输入用户%s的密码:",user.userName);
                    i=0;
                    char k;
                    while((k=getch())!='\r')
                    {
                        keyword[i]=k;
                        if(keyword[i]=='\b')
                        {
                            printf("\b \b");
                            i--;
                        }
                        else
                        {
                            printf("*");
                            i++;
                        }
                    }
                    keyword[i]='\0';
                    i=0;//下标归零
                    if(strcmp(user.keyWord,keyword)==0)
                    {

                        printf(">>>订单打印中......\n");
                        Sleep(1000);


                        fread(templater,moveway,1,fp);//将购物信息之前的信息全部转移到temp文件

                        for(i=0;i<35;i++)//重写用户基本信息
                        {
                            fprintf(fp2,"%c",templater[i]);
                        }
                        i=0;

                        while(i<BUYCAR.lenth)
                        {
                            fprintf(fp2,"%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                            printf("%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                            i++;
                        }
                        printf(">>>订单打印成功\n");
                        system("pause");
                        flag=1;
                        break;
                    }
                    else
                    {
                        printf(">>>密码输入错误!请重新输入\n");
                        continue;
                    }


                }
                break;
            case 'n':
            case 'N':
                flag=1;
                break;
            default:
            printf(">>>输入错误,请重新输入\n");
            continue;

    }
   }


        fclose(fp);
        fclose(fp2);
        if(remove("E:\\hugo.txt")==0)
        {
            printf("remove success");
        }
        else
        {
            perror("remove");
        }

        rename("E:\\temp.txt","E:\\hugo.txt");


}
qq_32681843
qq_32681843   2016.05.11 17:32

重来一遍

 int PrintOderpage()
{
    char templater[100];
    int moveway;
    FILE *fp,*fp2;
    //文件读写准备
    char path[]="E:\\";
    strcat(path,user.userName);//user.userName为hugo
    strcat(path,".txt");
    fp=fopen(path,"r+");//读写形式打开文件
    int ch;
    int i=0;
    while(1)
    {
        ch=fgetc(fp);
        if(ch=='#')
        {
            break;
        }


    }
    ch=fgetc(fp);
    while(1)//文件里空格代表密码结束
    {
        user.keyWord[i]=ch;
        i++;
        ch=fgetc(fp);
        if(ch==' ')
            break;
    }
    user.keyWord[i]='\0';                   //从文件读取用户密码
    fclose(fp);

    fp=fopen(path,"r+");//读写形式打开文件
    fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
    fscanf(fp,"%s",user.date);//此行代码为了跳过第一行
    fscanf(fp,"%s",user.sex);
    fscanf(fp,"%s",user.date);//此行过后指针指向购物信息的那一行
    system("cls");
    printf(">>>您的订单信息为:\n");
    printf(">>>用户名: %s 用户性别: %s 用户生日: %s \n",user.userName,user.sex,user.date);
    moveway=ftell(fp);//文件偏移36
    fclose(fp);



    system("pause");

     i=0;
     int price=0;
     while(i<BUYCAR.lenth)//计算总价
    {
        price+=BUYCAR.good[i].price;
        i++;
    }
    printf("************************************************\n");
    printf(">>>商品总价 : %d元\n",price);
    char chioce;
    printf(">>>您确认付款吗?(y/n):");
    scanf(" %c",&chioce);
    char keyword[15];
    int flag=0;
                            //重写文件

        fp2=fopen("E:\\temp.txt","w+");//创建临时文件
        if(fp==NULL)
        {
            exit(0);
        }
        fp=fopen(path,"r");

    while(flag==0)
    {
            switch(chioce)
            {
                case 'y':
                case 'Y':
                i=0;
                while(1)
                {
                    printf(">>>请输入用户%s的密码:",user.userName);
                    i=0;
                    char k;
                    while((k=getch())!='\r')
                    {
                        keyword[i]=k;
                        if(keyword[i]=='\b')
                        {
                            printf("\b \b");
                            i--;
                        }
                        else
                        {
                            printf("*");
                            i++;
                        }
                    }
                    keyword[i]='\0';
                    i=0;//下标归零
                    if(strcmp(user.keyWord,keyword)==0)
                    {

                        printf(">>>订单打印中......\n");
                        Sleep(1000);


                        fread(templater,moveway,1,fp);//将购物信息之前的信息全部转移到temp文件

                        for(i=0;i<35;i++)//重写用户基本信息
                        {
                            fprintf(fp2,"%c",templater[i]);
                        }
                        i=0;

                        while(i<BUYCAR.lenth)
                        {
                            fprintf(fp2,"%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                            printf("%s %f %d\n",BUYCAR.good[i].name,BUYCAR.good[i].price,BUYCAR.good[i].buy);
                            i++;
                        }
                        printf(">>>订单打印成功\n");
                        system("pause");
                        flag=1;
                        break;
                    }
                    else
                    {
                        printf(">>>密码输入错误!请重新输入\n");
                        continue;
                    }


                }
                break;
            case 'n':
            case 'N':
                flag=1;
                break;
            default:
            printf(">>>输入错误,请重新输入\n");
            continue;

    }
   }


        fclose(fp);
        fclose(fp2);
        if(remove("E:\\hugo.txt")==0)
        {
            printf("remove success");
        }
        else
        {
            perror("remove");
        }

        rename("E:\\temp.txt","E:\\hugo.txt");


}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!