首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当文件名(在C#中)中不存在文件扩展名时,从文件中检索文件扩展名吗?

当文件名(在C#中)中不存在文件扩展名时,从文件中检索文件扩展名吗?
EN

Stack Overflow用户
提问于 2010-09-09 14:35:52
回答 6查看 1.2K关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b3445ffb-55f4-4538-bc6f-13534fd549f6

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

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

注意:您可能想知道为什么我有一个满是GUID的目录,数据库应该跟踪GUID并将其与文件名和扩展名进行匹配,但表被删除了。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-09 14:42:42

这些文件头应该出现在该特定类型的每个有效文件中。

JPEG

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0xFF 
0xD8 

PDF

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0x25
0x50
0x44
0x46

DOC

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0xD0 
0xCF 
0x11 
0xE0 
0xA1 
0xB1 
0x1A 
0xE1

DOCX

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0x50 
0x4B 
0x03 
0x04

为了好玩,我用F#写了一个小应用程序来匹配文件。(一定要喜欢模式匹配!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()
票数 10
EN

Stack Overflow用户

发布于 2010-09-09 14:38:54

不,Windows不在文件系统中提供此元数据。因为您只需要担心几种类型,所以以编程方式检查文件头并查看要将文件重命名为哪个扩展名并不难。

票数 1
EN

Stack Overflow用户

发布于 2010-09-09 14:40:56

要找出文件中的内容类型,您需要知道您正在查找的内容的签名或“魔术数字”。某些扩展可能不具有此特征。您可以使用such a file signature table创建一个可以识别某些扩展的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3677593

复制
相关文章
C#从字符创中分离文件路径、文件名及扩展名
明志德道
2023/10/21
3420
C#从字符创中分离文件路径、文件名及扩展名
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户7639835
2021/09/01
3.7K0
PHP 中获取文件扩展名的正确方法
在 PHP 中,如何获取文件扩展名名呢,我们可能会用字符串操作函数进行处理,比如:
Denis
2023/04/15
1.3K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell  提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是 内容:
用户1685462
2021/09/05
3.3K0
Centos8中如何更改文件夹中多个文件的扩展名
在目录中递归更改文件扩展名的最常见方法是使用 shell 的 for 循环。我们可以使用 shell 脚本提示用户输入目标目录、旧的扩展名和新的扩展名以进行重命名。以下是脚本内容:
用户9236362
2021/11/30
4K0
java源文件扩展名_java源文件名的后缀是什么?
java源文件名的后缀是:“.java”。java编译后的文件扩展名是:“.class”;“class”文件全名称为“Java class”文件,主要在平台无关性和网络移动性方面使Java更适合网络。
全栈程序员站长
2022/09/08
3.4K0
java源文件扩展名_java源文件名的后缀是什么?
python: 获取 后缀名(扩展名) / 文件名
使用 os.path.splitext(file)[0] 可获得 文件名 。 使用 os.path.splitext(file)[-1] 可获得以 . 开头的 文件后缀名 。
JNingWei
2018/09/27
11.3K0
js获取input上传文件的文件名和扩展名的方法
使用 js 可以获取 input 上传文件的文件名和扩展名,这里我整理一下具体方法:
德顺
2019/11/13
13.5K0
asp文件运行方式_asp文件的扩展名
免费的jsp空间太难申请了,好不容易申请到asp空间,却发现下载不了apk文件,网上说可以增加IMEI来实现,可免费的空间哪有这个功能(收费的才提供这功能),这可怎么办?
全栈程序员站长
2022/11/17
5.9K0
os.path.splitext()用法--分离文件名与扩展名
用法: os.path.splitext(“文件路径”) 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作
狼啸风云
2021/03/03
1K0
IDEA提示CreateProcess error=206, 文件名或扩展名太长。
引起这个错误的主要原因是java启动时带的启动参数超过了window的最大长度限制导致的,
JQ实验室
2022/10/17
3.5K0
python获取文件名不含后缀名_python文件扩展名主要有
第三种:判断后缀名是否在字符串中(这种会存在误判,若是.pyx后缀,一样会打印True,前面两种不会)
全栈程序员站长
2022/11/09
8890
与python相关的文件扩展名
一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
py3study
2020/01/09
1.2K0
在 Git 中当更改一个文件名为首字母大写时
一般开发中在 Mac 上开发程序,并使用 Git 进行版本管理,在使用 React 编写 Component 时,组件名一般建议首字母大写。
山月
2021/01/04
1.7K0
Android – 在Gradle中更改APK文件名
默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。 需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。 android { compileSdkVersion 25 buildToolsVersio
code_horse
2018/07/02
2.9K0
java源程序文件扩展名_JAVA源代码的扩展名为( )
Java源程序(.java文件)-java字节码文e68a8462616964757a686964616f31333433626462件(.class文件)-由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)-字节码文件(.class)就会在java虚拟机中执行。
全栈程序员站长
2022/09/08
1.5K0
java源程序文件扩展名_JAVA源代码的扩展名为( )
编写批处理文件(扩展名为.bat)
批措置的介绍 扩展名是bat(在Windows NT/2000/xp/2003/win 7 也可所以cmd)的文件就是批措置文件。 首先批措置文件是一个文本文件,这个文件的每一行都是一条DOS呼吁(年夜部门时辰就好象我们在DOS提示.
Enjoy233
2019/03/05
2.7K0
keil生成bin文件失败_编译后生成的文件扩展名为
在KEIL魔术棒中通过以下方式生成bin文件时,居然出错,当时震惊了,第一次出现这种情况:
全栈程序员站长
2022/11/01
1.5K0
keil生成bin文件失败_编译后生成的文件扩展名为
使用Python,怎么获得文件扩展名?
Python标库非常的强大,满足日常需求完全没有问题。今天使用标库os模块,实现获得文件扩展名。
TalkPython
2020/12/11
1.3K0
点击加载更多

相似问题

当某些文件扩展名不存在时,选择多个文件扩展名

10

如何从文件名中修剪文件扩展名

12

从文件名中删除扩展名

10

从文件完整路径中检索不带扩展名的文件名

20

从文件名中删除扩展名

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文