исполняемый файл не может создать новый файл при выполнении двойного щелчка

Я пишу программу, которая создает новый текстовый файл при выполнении. Ничего слишком сложного. После компиляции программы я заметил, что она создает новый файл, как и ожидалось, при выполнении с помощью терминала, но не может создать новый файл при выполнении с помощью двойного щелчка.
Вот пример кода, который я использую:

#include <fstream>
#include <iostream>
using namespace std;

int main() {
    ofstream outputFile("NewFile.txt");
    outputFile << "Some text";
    outputFile.close();
    printf("File created successfully!\n");
    return 0;
}

Почему это происходит?


person Yoav Kadosh    schedule 12.12.2012    source источник
comment
Он создает файл относительно текущего рабочего каталога. Вероятно, вы можете указать желаемый текущий рабочий каталог, когда определяете значок/кнопку для приложения. В качестве альтернативы укажите абсолютный путь в коде.   -  person jogojapan    schedule 12.12.2012
comment
@jogojapan В таком случае, каков текущий рабочий каталог при выполнении с использованием двойного щелчка? Разве это не должен быть один и тот же каталог?   -  person Yoav Kadosh    schedule 12.12.2012
comment
Я не очень хорошо знаком с OS X, но есть много связанных вопросов: google.com/ Возможно, это поможет?   -  person jogojapan    schedule 12.12.2012


Ответы (1)


Мне удалось решить проблему следующим образом:

#include <fstream>
#include <iostream>
using namespace std;

int main(int argc,char *argv[]) {

    // dirsep is a pointer to the file name
    char *dirsep = strrchr( argv[0], '/' );
    // If it's not null, set the value to 0, seperating the directory
    // from the file name
    if( dirsep != NULL ) *dirsep = 0;

    // Change the current working directory to the path of the executable
    if(chdir(argv[0]) != 0) printf("The file will be created in the home directory");

    ofstream outputFile("NewFile.txt");
    outputFile << "Some text";
    outputFile.close();
    printf("File created successfully!\n");
    return 0;
}

Большое спасибо @jogojapan за то, что указал мне правильное направление.

person Yoav Kadosh    schedule 14.12.2012