编辑:问题不在于我的c。问题是我如何在GameMaker Studio中调用共享库,这就是它不起作用的原因。
我正在尝试检测文件是否存在,我在Internet上尝试了许多方法,但似乎都不起作用。这是一个例子:
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上工作。
如果您在Linux
,那么GCC
实现了文件系统技术规范,很快将包含在C17
中。
您可以使用std::filesystem::exists。
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
if(fs::exists("/usr/bin/gedit"))
{
...
// use file here
}
}
在Linux你有stat()
系统调用:
struct stat st;
int res = stat(filename, &st);
bool exists = res == 0;
如果需要更精细的操作,可以在res非零的情况下检查errno:
if (res == 0)
return true;
if (errno == ENOENT)
return false;
throw errno; //you're throwing an int, aren't you?
另外,作为奖励,如果你想知道它是一个目录还是一个普通文件,还是一个fifo,还是一个套接字或一个设备。。。您可以检查st.st\U模式的内容。
问题内容: 如何在不使用try语句的情况下检查文件是否存在? 问题答案: 如果您要检查的原因是可以执行类似的操作if file_exists: open_it(),则try尝试使用a来打开它会更安全。检查然后打开可能会导致文件被删除或移动,或者介于检查和尝试打开文件之间。 如果您不打算立即打开文件,则可以使用 os.path.isfile True如果path是现有的常规文件,则返回。这遵循符号链
我想确定C 11中是否存在一个文件 我有以下代码: 和 哪一个是正确的和惯用的?
问题内容: 我正在使用Java 7 IO的新功能,实际上我试图接收文件夹的所有xml文件。但这在文件夹不存在时引发异常,如何检查新IO是否存在该文件夹? 问题答案: 使用: 您可以选择传递此方法的值: 还有一种方法:
问题内容: Go的标准库没有专门用于检查文件是否存在的函数(如Python的)。什么是 惯用的 方式做到这一点? 问题答案: 要检查文件是否不存在,等同于Python的文件: 要检查文件是否存在,等效于Python的文件: 编辑:根据最近的评论
问题内容: 在打开文件以Java读取之前,如何检查文件是否存在?(相当于Perl的)。 关于SO的唯一类似问题涉及写入文件,因此使用回答了该问题,这显然不适用于此处。 如果可能的话,我宁愿使用真正的API调用返回,而不是使用“调用API来打开文件并在引发异常时捕获并在文本中检查’无文件’的情况下捕获”,但是我可以接受后者。 问题答案: 使用:
问题内容: 我需要检查远程服务器上是否存在特定文件。使用和不起作用。有什么想法如何快速轻松地做到这一点? 问题答案: 您必须使用CURL