C++ 如何通过使用c+证明文件的路径来查找文件的幻数+;? intmain() { FILE*fp=fopen(“/root/ds/filehandling/a.pdf”、“rb”); 无符号字符魔术[4]; fread((void*)magic,1,4,fp); 您可能会遇到分段错误,因为没有像/root/ds/filehandling/a这样的文件,因此fopen会失败,但您甚至从未检查其返回值。fp将是nullptr,而将其传递给fread之类的函数只是自找麻烦

C++ 如何通过使用c+证明文件的路径来查找文件的幻数+;? intmain() { FILE*fp=fopen(“/root/ds/filehandling/a.pdf”、“rb”); 无符号字符魔术[4]; fread((void*)magic,1,4,fp); 您可能会遇到分段错误,因为没有像/root/ds/filehandling/a这样的文件,因此fopen会失败,但您甚至从未检查其返回值。fp将是nullptr,而将其传递给fread之类的函数只是自找麻烦,c++,file,file-handling,C++,File,File Handling,这个问题实际上与幻数无关;如果您想在不知道文件扩展名(即不知道文件全名)的情况下打开文件,您必须通过模式匹配找到所需的文件。请注意,可能不止一个文件;例如,如果有一个文件a.txt和一个文件a.pdf,您必须决定为搜索词“a”选择哪一个 请记住,文件的“扩展名”只是其名称的最后一部分;它只是一种约定。许多文件甚至没有这样的名称 顺便说一句,不要忘了fclose所以,您想指定a作为文件名,并在文件打开时获取a.pdf?如果目录中也存在a.txt,您希望发生什么?如果可能,请阅读这两个文件的魔法编号

这个问题实际上与幻数无关;如果您想在不知道文件扩展名(即不知道文件全名)的情况下打开文件,您必须通过模式匹配找到所需的文件。请注意,可能不止一个文件;例如,如果有一个文件
a.txt
和一个文件
a.pdf
,您必须决定为搜索词
“a”
选择哪一个

请记住,文件的“扩展名”只是其名称的最后一部分;它只是一种约定。许多文件甚至没有这样的名称


顺便说一句,不要忘了
fclose

所以,您想指定
a
作为文件名,并在文件打开时获取
a.pdf
?如果目录中也存在a.txt,您希望发生什么?如果可能,请阅读这两个文件的魔法编号。我不明白您想要什么。请花点时间问一个更好的问题。例如,您可以向我们提供所需的用户代码和预期的输出/副作用。例如:“我需要调用
get\u magic(“/path/a”)
,它将返回一个文件名列表和相关的magic number,文件的magic number是…”您的问题中没有提供文件类型。扩展名不是文件类型,它只是文件名的一部分。“扩展名”部分(
.pdf
)只是文件名的一部分,除了按照约定之外,不涉及文件的内容。如果没有文件的全名,则无法打开文件,因此无法执行您想要执行的操作。谢谢,真的帮了大忙
int main()
{

    FILE *fp = fopen("/root/ds/filehandling/a.pdf", "rb");
    unsigned char magic[4];
    fread((void *)magic, 1, 4, fp);
    cout << hex << "magic:";
    for (int i = 0;  i < 4;  i++)
        cout << " 0x" << int(magic[i]);
    cout << dec << endl;
    return 0;
}
    FILE *fp = fopen("/root/ds/filehandling/a", "rb");
    unsigned char magic[4];
    fread((void *)magic, 1, 4, fp);
    cout << hex << "magic:";
    for (int i = 0;  i < 4;  i++)
        cout << " 0x" << int(magic[i]);
    cout << dec << endl;
    return 0;
}