【发布时间】: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 这就是为什么我没有把它放在答案中。
标签: c++