#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编译器编译它...是一个操作系统错误或我的代码或编译器有任何问题吗?
答案 0 :(得分:3)
有两件事突然袭来我:
对于大多数完整路径,30个字符是不够的。如果可以避免,也不应该使用new
;固定长度的数组也可以进入堆栈;这是std::string
的工作,如果有的话。
在尝试删除文件之前,您没有关闭该文件。平台因此要求不同,但我认为Windows并不喜欢这样。在调用remove
之前销毁或关闭流。