2016-12-09 14 views
0

我一直在線尋找解決上述問題,迄今爲止沒有 成功。我將在下面更詳細地描述這個問題。雙擊編譯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]  
+0

程序的運行目錄可能不是Test,因此找不到文件test.txt。 –

+0

可執行文件以不同的方式從相同的目錄運行:直接使用終端或雙擊。我誤解「運行目錄」嗎? –

+0

雙擊時不清楚運行的目錄是什麼。您可以通過打印出正在運行的目錄並嘗試使用完整路徑來訪問該文件來進行檢查。 –

回答

0

一個可能的原因可能是運行終端的情況爲超級用戶,位於對普通用戶有訪問限制的文件夾中。 (超級用戶沒有此限制)

解決方案:給當前用戶在此文件夾中讀/寫權限。

+0

我試過你提供的解決方案,但它不能解決問題!不過謝謝你的想法。 –