Двойной щелчок по скомпилированному исполняемому файлу C++ Unix не открывает существующий файл для чтения информации

Я искал в Интернете, чтобы решить вышеуказанную проблему, но пока безуспешно. Я опишу проблему более подробно ниже.

Моя программа содержит только один файл.cpp. Программа должна отображать текст из "test.txt", если этот файл открыт. В противном случае должно отображаться сообщение "Не удалось открыть...". Вопрос следует:

Я открываю терминал, захожу в каталог, содержащий мой файл, компилирую и запускаю обычными командами: "g++ main.cpp" и "./a.out". Когда я запускаю свою программу таким образом, используя терминал напрямую, программа работает правильно. Он отображает текст, когда текстовый файл существует, и выводит ошибку, когда он не существует. Когда я дважды щелкаю исполняемый файл Unix "a.out", хотя текстовый файл существует и помещается рядом с исполняемым файлом, программа отображает сообщение "Не удалось открыть...". Я не знаю, что думать в этот момент. Должен ли код содержать что-то еще, кроме того, что ниже?

Операционная система: OS X 10.9.5

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

const int MAX_CHAR_READ = 100;


int main(int argc, const char * argv[])
{
    ifstream read_file;
    cout << endl << endl;

    //Allocate dynamic memory
    char * file = new char[strlen("test.txt") + 1];
    char * text_line = new char[MAX_CHAR_READ + 1];

    strcpy(file, "test.txt");

    //Attempt to open a file for reading
    read_file.open(file);

    if(read_file.is_open() == true)
    {
        cout << "File: " << file << " is open!" << endl;
        read_file.get(text_line, MAX_CHAR_READ, ';');
        cout << text_line << endl;
        read_file.close();
    }
    else
        cout << "Failed to open: " << file << endl;

    cout << endl << endl;

    //Deallocate dynamic memory
    delete [] file;
    delete [] text_line;
    return 0;
}

Пример выполнения программы с использованием терминала вручную:

$ cd Desktop/Other/Test
$ g++ main.cpp
$ ./a.out

File: test.txt is open!
Hello World!

$

Пример выполнения программы, дважды щелкнув по тому же исполняемому файлу:

$/Users/vladimirmeshcheryakov/Desktop/Other/Test/a.out ; exit;

Failed to open: test.txt

logout

[Process completed]    

2 ответа

Одной из возможных причин может быть запуск терминала в качестве суперпользователя в папке с ограничением доступа для обычного пользователя. (суперпользователь не имеет этого ограничения)

Решение: дать текущему пользователю право на чтение / запись в этой папке.

Теперь мне нужно найти решение получения пути к исполняемому файлу.

Проверьте, argv[0] содержит это.

Другие вопросы по тегам