如何在 C++ 中重命名文件
Posted
技术标签:
【中文标题】如何在 C++ 中重命名文件【英文标题】:How to rename a file in C++ 【发布时间】:2015-04-26 17:31:26 【问题描述】:我重命名文件的代码部分不起作用。我尝试在另一个项目中单独编写它,它可以工作。请帮帮我。
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
int main ()
char address[] = "";
char newname[] = "";
int action;
char confirm;
int result;
cout << "File Manipulator 1.0" << endl;
cout << "--------------------" << endl << endl;
cout << "Type the full address of a file you wish to manipulate." << endl << endl;
ADDRESS:cin >> address;
fstream file(address);
if (!file.good())
cout << "The selected file does not exist! Try again. ";
goto ADDRESS;
else
cout << endl << "-----------------------------------" << endl;
cout << "Type 1 to move the selected file." << endl;
cout << "Type 2 to rename the selected file." << endl;
cout << "Type 3 to delete the selected file." << endl;
cout << "-----------------------------------" << endl << endl;
ACTION:cin >> action;
if (action == 1)
cout << 1;
else if (action == 2)
cout << "Enter the new name: ";
cin >> newname;
cout << "Are you sure you want to rename the selected file? Y/N ";
CONFIRM:cin >> confirm;
if (confirm == 'Y' || 'y')
result = rename(address, newname);
if (result == 0)
cout << "renamed";
else
perror("not renamed");
else if (confirm == 'N' || 'n')
cout << "No";
else
cout << "You typed an invalid command! Try again. ";
goto CONFIRM;
else if (action == 3)
cout << 3;
else
cout << "You typed an invalid command! Try again." << endl;
goto ACTION;
return 0;
顺便说一句,整个代码还没有完成,所以只检查重命名部分。谢谢。
【问题讨论】:
什么平台?它在什么方面不起作用? @AlanStokes 它只是不会重命名文件。这意味着if (result == 0)
条件在哪里弹出错误“未重命名”。
char address[] = "";
声明一个长度为 1 的数组。长度是根据初始化程序计算的。然后,您通过写入该数组的末尾而导致缓冲区溢出,之后,所有赌注都关闭了。要解决此问题,您可以使用 std::string
而不是 char 数组。
【参考方案1】:
嗯,这就是解决方案。
#include <iostream>
#include <cstdio>
#include <fstream>
#include <string>
using namespace std;
int main()
string address;
string newname;
在这里你可以看到我使用了字符串而不是 char 数组。
char input;
int action;
char confirm;
int result;
cout << "File Manipulator 1.0" << endl;
cout << "--------------------" << endl << endl;
cout << "Type the full address of a file you wish to manipulate." << endl << endl;
getline(cin, address);
ifstream myfile(address.c_str());
我将 ifstream 与 c_str()
函数一起使用,该函数将 std::string
的内容传递到 C 风格的字符串中。
// try to open the file
if (myfile.is_open())
满足条件时,您必须关闭打开的文件,以便以后能够操作/使用它。
myfile.close();
CREATE:cout << endl << "-----------------------------------" << endl;
cout << "Type 1 to move the selected file." << endl;
cout << "Type 2 to rename the selected file." << endl;
cout << "Type 3 to delete the selected file." << endl;
cout << "-----------------------------------" << endl << endl;
cin >> action;
switch (action)
case 1:
// do nothing.
break;
case 2:
// rename file.
cout << "Enter the new name" << endl << endl;
cin.ignore();
我在这里使用了 ignore() 函数来忽略我在调用它时指定的字符数量。
getline(cin, newname);
cout << "Are you sure you want ot rename the selected file ? Y/N" << endl << endl;
cin >> confirm;
if (confirm == 'Y' || confirm == 'y')
与我之前解释的 c_str() 的情况相同。
rename(address.c_str(), newname.c_str());
break;
case 3:
// delete file.
remove(address.c_str());
break;
default:
cout << "You typed an invalid command!" << endl;
break;
else
cout << "The selected file does not exist! Would you like to create it? ";
cin >> input;
如果您输入的文件名不存在,系统会提示您创建一个具有指定名称的文件,然后使用 goto 将您重定向到操作菜单。
if (input == 'y' || input == 'Y')
// create the file.
ofstream output(address.c_str());
output.close();
cout << "File created";
goto CREATE;
return 0;
感谢您的尝试:)
【讨论】:
以上是关于如何在 C++ 中重命名文件的主要内容,如果未能解决你的问题,请参考以下文章