2016-12-09 4 views
0

Я искал онлайн, чтобы решить вышеупомянутую проблему без успеха . Я опишу этот вопрос более подробно ниже.Двойной клик Скомпилированный C++ Unix Executable не открывает существующий файл для чтения информации От

Моя программа содержит только один файл .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]  
+0

Подсказка программы, вероятно, не является тестом и поэтому не может найти файл test.txt. –

+0

Исполняемый файл запускается из одного и того же каталога по-разному: напрямую с помощью терминала или двойного щелчка. Не понимаю ли я «запущенный каталог»? –

+0

Непонятно, что работает подкаталог при двойном щелчке. Вы можете проверить, распечатав текущий каталог, а также попытаться получить доступ к файлу, используя полный путь. –

ответ

0

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

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

+0

Я попробовал решение, которое вы предоставили, и оно не устраняет проблему! Благодарю вас за эту идею. –

 Смежные вопросы

  • Нет связанных вопросов^_^