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

时间:2014-12-24 17:32:07

标签: c++

我想创建一个文件generated.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();

`

但是,如果我在另一台没有的电脑上运行程序&#34;我:\&#34;磁盘,它不工作,也程序工作,但它不会保存生成的数字。 所以我的问题是:如何使用generated.txt文件在另一台PC上创建目录?它应该运行程序并在那里程序droped创建文件。 谢谢,对不起我的英文)

2 个答案:

答案 0 :(得分:2)

C++11不知道目录(可能在实验中改变C ++ 14)。

您需要一些特定于操作系统的API。如果您的系统(例如Linux)拥有它,请考虑POSIX(例如其mkdirchdirreaddir函数。)

或者使用一些包装OS特定功能的库,例如POCOBoostQt

顺便说一句,你可以使用getenv(3)(或某些程序参数或配置数据)的环境变量,并从中构建一些文件路径(例如使用snprintf)。

请注意,目录的概念是特定于操作系统的。并且某些操作系统并不总是使用/(按POSIX的要求)作为目录分隔符。

BTW,我正在使用Linux,而"I:\\Dropbox\\visual studio 2013\\Projects\\Number generator\\generated.txt"这样的文件路径与您的PC上的行为完全相同。 (在我的系统上,你的文件路径没有引用任何目录,它只是一个奇怪的文件名,以当前目录中的I:开头)

答案 1 :(得分:0)

使用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;
}