编辑:问题不在于我的c ++。问题在于我如何在GameMaker Studio中调用共享库,这就是它无法正常工作的原因。
我正在尝试检测文件是否存在,并且我在互联网上尝试了很多方法,但它们似乎都没有用。这是一个例子:
double file_exists(char *filename)
{
std::ifstream infile(filename);
return infile.good();
}
我认为它只适用于文本文件。例如,这不起作用:
file_exists("/usr/bin/gedit");
...因为那是一个Linux可执行文件。
我想要一种方法来检查文件是否存在而不管其文件类型如何。
在Windows上,这可以很容易地实现:
double file_exists(char* filename)
{
DWORD fileAtt = GetFileAttributesA(filename);
if(fileAtt == INVALID_FILE_ATTRIBUTES)
throw GetLastError();
return (bool)((fileAtt&FILE_ATTRIBUTE_DIRECTORY) == 0);
}
但我在Linux上,我需要一个与Linux相同的上述代码片段。
答案 0 :(得分:2)
在Linux中,您有stat()
系统调用:
struct stat st;
int res = stat(filename, &st);
bool exists = res == 0;
如果您想要更精细,可以查看errno
res
是否为非零:
if (res == 0)
return true;
if (errno == ENOENT)
return false;
throw errno; //you're throwing an int, aren't you?
另外,作为奖励,如果您想知道它是目录还是普通文件,还是fifo或套接字或设备......您可以查看st.st_mode
的内容。
答案 1 :(得分:0)
如果您在Linux
,则GCC
会实施文件系统技术规范,很快就会包含在C++17
中。
您可以使用std::filesystem::exists。
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
if(fs::exists("/usr/bin/gedit"))
{
...
// use file here
}
}