如何在某个目录中命名文本文件
How to name text file at a certain directory?
好的,谢谢你的回答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;
注意:缩进很重要,可以帮助您阅读自己的代码。 努力保持代码美观。
首先,了解以下内容:
- 从小处简单开始。
- 一次增加一点复杂性。
- 在每一步进行测试。
- 单独开发新功能。
- 切勿添加到不起作用的代码中。
其余的,我不使用 Windows,所以我不能确定我的代码会在那里工作,但这种方法会。
您正在尝试 1( 从用户那里获取文件名,2( 修改它,然后 3( 使用它打开文件;我们将孤立地发展这三件事。
从用户处获取文件名。文明文件名不包含空格,因此可以用cin
读取它们,但是如果要允许空格,则可以改用getline
。无论哪种方式,都要测试它。
修改文件名。编写为文件名赋值的代码,就像为路径赋值一样 - 不要从用户那里获取文件名,这会减慢测试速度并且不是适当的隔离。现在尝试附加它们。如果您尝试filepath + filename
,您可能会收到编译器错误。在这里,您必须了解std::string
和char[]
之间的区别。char[]
是一个char
数组,它(通常(包含一个以 null 结尾的字符序列;您必须阅读数组和指针。它是一个原始类型,你不能简单地用"+"连接其中的两个,你必须使用类似 strcat
的东西,如果你没有在数组上做功课,这是危险的。另一方面,std::string
更复杂,可以处理"+"和许多其他操作。如果你有一个std::string x
,并且你决定你想要一个char[]
毕竟,你可以得到这样的一个:x.c_str()
。
打开文件。如果我没记错的话,ofstream
构造函数可以采用char[]
,但不能采用std::string
。使用硬编码字符串(隔离!
一旦这三个组件独立工作,您就可以将它们挂接在一起。
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入