我一直在線尋找解決上述問題,迄今爲止沒有 成功。我將在下面更詳細地描述這個問題。雙擊編譯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]
程序的運行目錄可能不是Test,因此找不到文件test.txt。 –
可執行文件以不同的方式從相同的目錄運行:直接使用終端或雙擊。我誤解「運行目錄」嗎? –
雙擊時不清楚運行的目錄是什麼。您可以通過打印出正在運行的目錄並嘗試使用完整路徑來訪問該文件來進行檢查。 –