我一直在网上搜索以解决上述问题 到目前为止成功。我将在下面详细描述这个问题。
我的程序只包含一个.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 :(得分:0)
导致该问题的可能原因之一可能是在具有对常规用户的访问限制的文件夹中将终端作为超级用户运行。 (超级用户没有这个限制)
解决方案:为当前用户授予此文件夹中的读/写权限。
答案 1 :(得分:0)
现在,我需要找到一种获取可执行文件路径的解决方案。
检查argv[0]
是否包含它。