如何在某个目录C++中创建文件

How to create file in some directory C++

本文关键字:C++ 创建 文件      更新时间:2023-10-16

我会创建一个生成的文件.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,chdirreaddir函数)。

或者使用一些库来包装特定于操作系统的函数,例如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;
}