删除C++中的文件时出错

Error while deleting a file in C++

本文关键字:出错 文件 C++ 删除      更新时间:2023-10-16
#include <iostream>
#include <string.h>
#include <fstream>
#include <conio.h>

int main()
{
    int k=0;
    char *source = new char[30];
    char *destination = new char[30];
    while(k==0)
{
    cout<<"Enter the source File location: ";
    cin>>source;
    cout<<endl<<"Enter the destination File location: ";
    cin>>destination;
    ifstream is(source,ios::in | ios::binary);
    ofstream os(destination,ios::out | ios::binary);
    if(is==NULL || os==NULL)
    {
        perror("Either the input or the ouput location is invalid");
        cout<<endl<<"Try again with new location.n";
        cout<<endl<<"To exit press 7 and to continue press 0";
        cin>>k;
    }
    else
    {
                    os<<is.rdbuf();
        k++;
        cout<<endl<<"File moved successfully";
        cout<<endl<<"Do you want to delete the original file: [y/n]";
        if(getch()=='y')
        {
            if(remove(source)== -1) 
            perror("Error in deleting File");
            else
            cout<<" Source File deleted.";
        }
    }
}
}
文件已成功删除,

但在删除文件时显示:

"删除文件时出错"权限被拒绝。

当它要求源地址和目标地址(如 C:/MIT/adi.txt(时,我使用了两种斜杠(向前和向后(,并且我正在使用 mingw 编译器编译它......是操作系统错误还是我的代码或编译器有任何问题?

有两件事突然出现在我面前:

  • 对于大多数完整路径,30 个字符是不够的。此外,如果可以避免,则不应使用new;固定长度的数组也可以放在堆栈上;如果有的话,这是std::string的工作。

  • 在尝试删除文件之前,您没有关闭该文件。平台在此要求上有所不同,但我认为Windows不喜欢这样。在调用 remove 之前销毁或关闭流。