如何在C++中更改存储在字符串中的文件扩展名?

Mr.*_*Ben 10 c++ encoding file-extension

好吧,这是交易,我正在我的大学介绍C++课程,并且无法弄清楚如何更改文件的扩展名.首先,我们要做的是在.txt文件中读取并计算单词,句子,元音等等.我得到了这个,但下一步是令我不安的.然后我们假设使用与输入文件相同的文件名创建一个新文件,但扩展名为.code而不是.txt(在新文件中,我们将通过在每个ASCII码中添加随机数来对字符串进行编码你感兴趣的角色).作为编程的初学者,我不太清楚如何做到这一点.我正在使用以下代码来获取输入文件:

cout << "Enter filename: ";
cin >> filename;
infile.open(filename.c_str());
Run Code Online (Sandbox Code Playgroud)

我假设要创建一个新文件,我将使用类似的东西:

outfile.open("test.code");
Run Code Online (Sandbox Code Playgroud)

但是在用户输入之前我不知道文件名是什么,所以我不能说"test.txt".因此,如果有人知道在创建新文件时如何更改该扩展,我将非常感激!

dvh*_*mme 13

我偶尔会问自己这个问题并最终在这个页面上,所以为了将来的参考,这里是单行语法:

string newfilename=filename.substr(0,filename.find_last_of('.'))+".code";
Run Code Online (Sandbox Code Playgroud)


Ala*_*lan 9

有几种方法可以解决这个问题.

您可以采用超级惰性方法,让它们只输入文件名,而不是.txt扩展名.在这种情况下,您可以将.txt附加到它以打开输入文件.

infile.open(filename + ".txt");
Run Code Online (Sandbox Code Playgroud)

然后你就打电话

outfile.open(filename + ".code");
Run Code Online (Sandbox Code Playgroud)

接下来的方法是获取整个文件名,包括扩展名,然后只需将.code附加到它,这样你就有了test.txt.code.

如果这是可以接受的话,这有点模棱两可.

最后,您可以使用std::string方法find,并replace获取没有扩展名的文件名,并使用它.

  • 更好的rfind()因为它会找到最后一个"." 在'abctxt'是有效文件名的情况下,而不是第一个 (3认同)

Reu*_*nen 9

通过使用一个忙-当然,如果这不是作业,但一个真实世界的项目,你可能会做自己-以及其他人阅读你的代码Boost.Filesystem的replace_extension(),而不是滚动您自己.只是没有足够简单的功能,你无法想出一个bug,至少在一些极端情况下.