Ofstream создает файл во временном каталоге Windows

ofstream batch;
batch.open("olustur.bat", ios::out);
batch <<"@echo off\n";
batch.close();
system("olustur.bat");

Я хочу создать olustur.bat во временной папке Windows. Мне не удалось этого добиться. Я новичок в C++, возможно ли это? Если да, то как?


person Rıdvan Çetin    schedule 25.10.2016    source источник
comment
Обычно в C:\users\<username>\AppData\Local\Temp   -  person erip    schedule 25.10.2016
comment
Да, но это будет работать только для моего компьютера.   -  person Rıdvan Çetin    schedule 25.10.2016
comment
Temp также хранится в %TEMP%. В зависимости от того, как вы компилируете свой C++, вы можете использовать std::getenv или GetEnvironmentVariable.   -  person erip    schedule 25.10.2016
comment
%TEMP%\olustur.bat тоже не работает   -  person Rıdvan Çetin    schedule 25.10.2016
comment
Вы не можете использовать %TEMP% с ofstream напрямую (или любую другую функцию файлового ввода-вывода, если уж на то пошло). Вы должны сначала запросить его значение. Используйте std::getenv("TEMP") или GetEnvironmentVariable("TEMP"), чтобы получить разрешенный временный путь, затем добавьте свое имя файла в конец этого пути, а затем передайте этот полный путь ofstream. .   -  person Remy Lebeau    schedule 25.10.2016


Ответы (1)


Можно использовать функцию Win32 API GetTempPath() для полный путь к временной папке, затем используйте std::ofstream для записи в нее файлов.

#include <iostream>
#include <windows.h>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    CHAR czTempPath[MAX_PATH] = {0};
    GetTempPathA(MAX_PATH, czTempPath); // retrieving temp path
    cout << czTempPath << endl;

    string sPath = czTempPath;
    sPath += "olustur.bat"; // adding my file.bat

    ofstream batch;
    batch.open(sPath.c_str());
    batch << "@echo off\n";
    batch.close();

    system(sPath.c_str());

    return 0;
}
person Raindrop7    schedule 25.10.2016
comment
На самом деле моя проблема заключается в том, чтобы доставить его сюда 'batch.open(olustur.bat, ios::out);' - person Rıdvan Çetin; 25.10.2016
comment
@RıdvanÇetin Похоже, вам нужно научиться объединять строки. - person erip; 25.10.2016