首页 > 解决方案 > 一次重命名多个文件的 C++ 程序

问题描述

我有一个包含名为 Slide1、Slide2、Slide3 等的 JPG 文件的目录,我想将它们重命名为我在名为“names.txt”的 txt 文件中编写的名称列表。每个新名称都在一行上,所以基本上我需要逐行读取这个 txt 文件并将每一行设为 JPG 文件的新名称。我需要对多个目录执行此操作,但我希望每个目录最多只能包含 60 个 JPG(我将使用相同的 names.txt 文件来重命名每个目录中的 JPG,因为是否存在重复的 JPG 并不重要目录之间的名称,唯一重要的是同一目录中没有两个 JPG 具有相同的名称)。

这是我到目前为止的代码。我知道一个问题是 char oldname[] 和 char newname[] 不能使用 + 运算符。那么如何将每个 JPG 的 char oldname[] 设为 Slide1、Slide2 等?至于 char newname[],我想也许我需要将 names.txt 的每一行作为字符串读取,然后将该字符串转换为 char 并将其设置为 char newname[],但我不知道该怎么做。

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    int myNum;
    cout << "How many slides are there? Max 60." << endl;   
    cin >> myNum;

    if (myNum > 60)
           cout << "Add more names to names.txt in lyrics folder, then rerun program." << endl; 

    if (myNum <= 60)
    {       
        int nextNum = 1;
        fstream readname;
        readname.open("names.txt",ios::in);
        if (readname.is_open())
        {
            string line;
            while (getline(readname,line))
            {
                char oldname[] = "Slide" + nextNum + ".JPG";
                char newname[] = line + ".JPG"; 
                nextNum = nextNum++;
                if (nextNum == myNum+1)
                    break;
            }
            readname.close();
        }
    }
    return 0;
}

如果有人可以解释如何使用字符串而不是字符来执行此操作,那也很好。这不是一个任务,它只是一个个人项目,所以我可以使用的方法没有限制。

标签: c++

解决方案


从 C++11 开始,我们有一个函数std::to_string,它接受一个数值并返回一个std::string对象。更多信息,请访问https://en.cppreference.com/w/cpp/string/basic_string/to_string

使用它,您可以按如下方式转换代码(在 while 循环中):

std::string oldName = std::string("Slide") + std::to_string(nextNum) + ".JPG";
std::string newName = line + ".JPG";

希望这可以帮助,

谢谢


推荐阅读