如何在 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++ 中重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中重命名文件?

如何在 Emacs 中重命名打开的文件?

如何在 HIVE 的分区中重命名文件

如何在上传过程中重命名图像文件

如何在 JGit 中重命名文件

markdown 如何在Mac OSX中重命名文件?