当前位置: 首页 > 知识库问答 >
问题:

如何检查文件是否存在(无论其文件类型如何)?[重复]

李浩邈
2023-03-14

编辑:问题不在于我的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上工作。

共有2个答案

戚令秋
2023-03-14

如果您在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
    }
}
何涵衍
2023-03-14

在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