如何在某个目录C++中创建文件
How to create file in some directory C++
我会创建一个生成的文件.txt到"I:\Dropbox....\generator\"文件夹中。
// array with 7 elements filled with 0
int num[7] = {0};
// create text file to write into genereted numbers
ofstream generated;
generated.open("I:\Dropbox\visual studio 2013\Projects\Number generator\generated.txt", ios::app);
// seed... without that function randomed one time
srand(time(NULL));
// randomize the array values
for (int i = 0; i < 7; i++){
num[i] = rand();
generated << " t" << i+1 << ": " << num[i];
}
generated << endl;
generated.close();
'
但是如果我在另一台没有"I:\"的PC上运行程序磁盘,比它不起作用,程序也工作,但它不保存生成的数字。所以我的问题是:如何使用生成的文件在另一台 PC 上创建目录.txt?它应该运行程序并在程序放置的地方创建文件。谢谢,对不起我的英语)
C++11 不知道目录(在 C++14 中可能会在实验中发生变化)。
您需要一些特定于操作系统的 API。如果您的系统(例如Linux)具有它,请考虑POSIX(例如其mkdir,chdir
,readdir
函数)。
或者使用一些库来包装特定于操作系统的函数,例如POCO或Boost或Qt
顺便说一句,你可以将环境变量与 getenv(3) 一起使用(或一些程序参数,或配置数据),并从中构造一些文件路径(例如使用 snprintf
)。
请注意,目录的概念是特定于操作系统的。并且某些操作系统并不总是使用/
(如 POSIX 规定的)作为目录分隔符。
顺便说一句,我使用的是 Linux 和像 "I:\Dropbox\visual studio 2013\Projects\Number generator\generated.txt"
这样的文件路径的行为与您的 PC 上的行为非常不同。(在我的系统上,您的文件路径不引用任何目录,它只是一个看起来很奇怪的文件名,以当前目录中的I:
开头)
使用 argv[0]
获取带有程序可执行文件路径的字符串。下面可以看到示例
#include <iostream>
#include <string>
#include <sstream>
int main(int argc, char *argv[])
{
std::cout<<argv[0]<<std::endl;
std::stringstream sst(argv[0]);
//char delimeter='/'; //for Linux
char delimeter=''; //for Windows
std::string part, full="", part_prev="";
while (std::getline(sst, part, delimeter))
{
full+=part_prev;
part_prev=part+delimeter;
}
full+="generators.txt";
std::cout<<full<<std::endl;
return 0;
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息