如何在某个目录中命名文本文件

How to name text file at a certain directory?

本文关键字:文本 文件      更新时间:2023-10-16

好的,谢谢你的回答Wug!我更改了我的代码,但现在它抱怨:

没有用于调用的匹配函数

std::basic_ofstream::basic_ofstream(std::basic_string(

不确定这有什么区别,但我只会发布我的所有代码,到目前为止还没有那么多。从现在开始,我会尽量让它更干净。

#include <iostream>
#include <windows.h>
#include <direct.h>
#include <fstream>
using namespace std;
int main()
{   /*Introduction*/
SetConsoleTitle("Journal");
string action, prom0, filename, filepath;
filepath = "C:\Users\-\Desktop\Projects\Journal Project\Logs\";
cout << "Hi and welcome to Journal! nHere you can write down your day.nWrite help for";
cout << "more nType command to start: ";
/*Choose Action*/
cin >> action;
if (action == "new")
{system("cls");
/*Make new Journal file*/
cout << "Filename: ";
getline(cin, filename);
 mkdir("C:\Users\-\Desktop\Projects\Journal Project\Logs");
ofstream journallogs(filepath + filename);
journallogs.close();
}
else {
cout << "Wrong commandn";
};
return 0;}

有两件事是错误的。 首先是编译器的抱怨:

ofstream journallogs("C:\Users\-\Desktop\Projects\Journal Project\Logs\" + getline(cin, filename), ios::out);

std::getline(istream&, string&)返回istream&,并且您无法将char *添加到istream。我建议查看getline()的文档,这可能有助于您更好地了解应该如何使用它。 无论如何,这里有一个例子:

string filepath = "C:\Users\-\Desktop\Projects\Journal Project\Logs\";
string filename;
getline(cin, filename);
ofstream journallogs(filepath + filename);

第二个问题是,在调用getline()之前,您正在从cin读到filename。 当您调用 getline() 时,filename的任何内容都将被删除,因此您将有效地修剪文件名的第一个单词,这可能不是您想要的。 要解决此问题,请删除无关cin >> filename;

注意:缩进很重要,可以帮助您阅读自己的代码。 努力保持代码美观。

首先,了解以下内容:

  1. 从小处简单开始。
  2. 一次增加一点复杂性。
  3. 在每一步进行测试。
  4. 单独开发新功能。
  5. 切勿添加到不起作用的代码中。

其余的,我不使用 Windows,所以我不能确定我的代码会在那里工作,但这种方法会。

您正在尝试 1( 从用户那里获取文件名,2( 修改它,然后 3( 使用它打开文件;我们将孤立地发展这三件事。

从用户处获取文件名。文明文件名不包含空格,因此可以用cin读取它们,但是如果要允许空格,则可以改用getline。无论哪种方式,都要测试它。

修改文件名。编写为文件名赋值的代码,就像为路径赋值一样 - 不要从用户那里获取文件名,这会减慢测试速度并且不是适当的隔离。现在尝试附加它们。如果您尝试filepath + filename,您可能会收到编译器错误。在这里,您必须了解std::stringchar[]之间的区别。char[]是一个char数组,它(通常(包含一个以 null 结尾的字符序列;您必须阅读数组和指针。它是一个原始类型,你不能简单地用"+"连接其中的两个,你必须使用类似 strcat 的东西,如果你没有在数组上做功课,这是危险的。另一方面,std::string更复杂,可以处理"+"和许多其他操作。如果你有一个std::string x,并且你决定你想要一个char[]毕竟,你可以得到这样的一个:x.c_str()

打开文件。如果我没记错的话,ofstream构造函数可以采用char[],但不能采用std::string。使用硬编码字符串(隔离!

一旦这三个组件独立工作,您就可以将它们挂接在一起。