一次重命名多个文件的 C++ 程序
Posted
技术标签:
【中文标题】一次重命名多个文件的 C++ 程序【英文标题】:C++ Program for Renaming Multiple Files at Once 【发布时间】:2019-12-16 04:47:02 【问题描述】:我有一个包含名为 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++ 的文件系统库(与 .NET 文件系统库的工作方式非常接近)感兴趣,您可以在这里查看:ecs.syr.edu/faculty/fawcett/handouts/CSE687/code/… 有一个适用于 Linux 的版本也是。这可以帮助您管理目录等。 @Everyone - 我们通常避免建议 C++ STL 提供功能的第三方库。一个例外是 Hinnant 的日期/时间库,该库目前正在被 C++ 标准合并。 @DavidC.Rankin 我很清楚这一点。然而,OP表示这是一个个人项目,“他可以使用的方法没有限制”。这其实是我第一次在本站推荐第三方库。考虑到他可能需要 OS API 来批量正确处理目录,我只是认为这可以帮助他。 不用担心。我只是提出一般性观点。对于这个有限的应用程序,您可能 100% 正确。 @DavidC.Rankin 这就是为什么我没有把它放在答案中。 【参考方案1】:从 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";
希望这会有所帮助,
谢谢
【讨论】:
请注意 Rajkumar 甚至没有尝试使用char
数组。这个很重要。当您进行字符串操作时,请使用string
。使用char
数组会使复杂性提高一到两个数量级。【参考方案2】:
您根本不应该使用char[]
数组。只需改用std::string
:
std::string oldname = "Slide" + std::to_string(nextNum) + ".JPG";
// Or, if you are not using C++11 or later:
/*
std::ostringstream oss;
oss << "Slide" << nextNum << ".JPG";
std::string oldname = oss.str();
*/
string newname = line + ".JPG";
【讨论】:
以上是关于一次重命名多个文件的 C++ 程序的主要内容,如果未能解决你的问题,请参考以下文章