gpt4 book ai didi

c# - 当文件名中不存在文件扩展名时从文件中检索文件扩展名(在 C# 中)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:52 26 4
gpt4 key购买 nike

我试着搜索这个,但我的谷歌搜索失败了。我有一个充满文件的目录,这些文件只是它们的 GUID:

b3445ffb-55f4-4538-bc6f-13534fd549f6

我知道它们只能是少数几个文件扩展名(doc、docx、pdf、jpg),但显然文件扩展名不存在。我可以编写一个脚本,尝试使用所有已知的文件扩展名打开文件,但效率不高。无论如何要读取文件并确定文件应该是什么?

OSX 在文件中存储文件类型代码,我希望 Windows 在文件中存储类似的元数据,文件扩展名只是一个历史产物。我有这么幸运吗?

NB 因为你可能想知道为什么我有一个充满 GUID 的目录,数据库应该跟踪 GUID 并将它与文件名和扩展名匹配,但是表被删除了。

最佳答案

这些是该特定类型的每个有效文件中应包含的文件头。

JPEG

0xFF 
0xD8

PDF

0x25
0x50
0x44
0x46

文档

0xD0 
0xCF
0x11
0xE0
0xA1
0xB1
0x1A
0xE1

DOCX

0x50 
0x4B
0x03
0x04

为了好玩,我用 F# 编写了一个与文件匹配的小应用程序。 (爱上模式匹配!)

module Program =

let main () =

let files =
seq {
for path in System.IO.Directory.GetFiles(directory) do
use fs = System.IO.File.OpenRead(path)
let buffer = Array.zeroCreate 8
let read = fs.Read(buffer, 0, 8)
match buffer with
| [| 0xFFuy; 0xD8uy; _; _; _; _; _; _; |] ->
yield (path, ".jpg")
| [| 0x25uy; 0x50uy; 0x44uy; 0x46uy; _; _; _; _; |] ->
yield (path, ".pdf")
| [| 0x50uy; 0x4Buy; 0x03uy; 0x04uy; _; _; _; _; |] ->
yield (path, ".docx")
| [| 0xD0uy; 0xCFuy; 0x11uy; 0xE0uy; 0xA1uy; 0xB1uy; 0x1Auy; 0xE1uy; |] ->
yield (path, ".doc")
| _ ->
yield (path, ".unk")
}
|> Seq.toArray

System.Console.ReadKey true |> ignore

main()

关于c# - 当文件名中不存在文件扩展名时从文件中检索文件扩展名(在 C# 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3677593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com