【发布时间】:2018-12-11 17:16:56
【问题描述】:
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;
}
这里的问题是我必须指定扩展名然后只有我会得到幻数,但我的目标是指定文件的名称而不给出其扩展名,以便在比较幻数时我可以确定它的类型。
这就是我想要的:
int main() {
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;
}
输出:魔术:0x25 0x50 0x44 0x46
但我收到“分段错误”
【问题讨论】:
-
那么,你想指定
a作为文件名并得到a.pdf作为打开的文件吗?如果目录中也存在 a.txt,您希望发生什么? -
如果可能,读取两个文件的幻数
-
我不明白你想要什么。请花点时间问一个更好的问题。例如,您可以向我们提供所需的用户代码和预期的输出/副作用。示例:“我调用
get_magic("/path/a")将返回文件名列表和关联的幻数,文件的幻数是......” -
您没有在问题的任何地方提供文件类型。扩展名不是文件类型,它只是文件名的一部分。
-
“扩展名”部分 (
.pdf) 只是文件名的一部分,除了按照约定外,没有说明文件的内容。您无法打开没有其全名的文件,因此您想要做的事情是不可能的。
标签: c++ file file-handling