C#判断文件的真实类型(非扩展名判断)

简介: 来自博客: http://outofmemory.cn/code-snippet/1394/C-decide-file-zhenshi-type-negate-kuozhanming-decide 有时候我们需要真实验证文件的类型,通常网友上传的文件我们只通过扩展名来验证,而扩展名是不靠谱的。

来自博客:
http://outofmemory.cn/code-snippet/1394/C-decide-file-zhenshi-type-negate-kuozhanming-decide

有时候我们需要真实验证文件的类型,通常网友上传的文件我们只通过扩展名来验证,而扩展名是不靠谱的。

我们可以通过文件头信息,来验证文件是否是真实的某类型文件,如下代码:

 
  1. public static void CheckTrueFileName()
  2.         {
  3.             string path = @"F:\DataSheet.doc";
  4.             System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
  5.             System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
  6.             string bx = " ";
  7.             byte buffer;
  8.             try
  9.             {
  10.                 buffer = r.ReadByte();
  11.                 bx = buffer.ToString();
  12.                 buffer = r.ReadByte();
  13.                 bx += buffer.ToString();
  14.             }
  15.             catch (Exception exc)
  16.             {
  17.                 Console.WriteLine(exc.Message);
  18.             }
  19.             r.Close();
  20.             fs.Close();
  21.             //真实的文件类型
  22.             Console.WriteLine(bx);
  23.             //文件名,包括格式
  24.             Console.WriteLine(System.IO.Path.GetFileName(path));
  25.             //文件名, 不包括格式
  26.             Console.WriteLine(System.IO.Path.GetFileNameWithoutExtension(path));
  27.             //文件格式
  28.             Console.WriteLine(System.IO.Path.GetExtension(path));
  29.             Console.ReadLine();
  30.         }
通过上面的方法,可以获取到选定文件的格式编码,然后在根据文件格式编码就可以知道这个文件是否是想要的真实格式了。
 
  1. public enum FileExtension
  2.         {
  3.             JPG = 255216,
  4.             GIF = 7173,
  5.             BMP = 6677,
  6.             PNG = 13780,
  7.             COM = 7790,
  8.             EXE = 7790,
  9.             DLL = 7790,
  10.             RAR = 8297,
  11.             ZIP = 8075,
  12.             XML = 6063,
  13.             HTML = 6033,
  14.             ASPX = 239187,
  15.             CS = 117115,
  16.             JS = 119105,
  17.             TXT = 210187,
  18.             SQL = 255254,
  19.             BAT = 64101,
  20.             BTSEED = 10056,
  21.             RDP = 255254,
  22.             PSD = 5666,
  23.             PDF = 3780,
  24.             CHM = 7384,
  25.             LOG = 70105,
  26.             REG = 8269,
  27.             HLP = 6395,
  28.             DOC = 208207,
  29.             XLS = 208207,
  30.             DOCX = 208207,
  31.             XLSX = 208207,
  32.         }
调用实例:string a=CheckTrueFileName();

if(a=="208207")那么这个文件就是excel文件。否则就不是。

相关文章
|
5月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
135 3
|
9月前
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
178 73
|
10月前
|
C#
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
基于 C# 编写的 Visual Studio 文件编码显示与修改扩展插件
178 9
|
11月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
123 3
|
11月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
223 2
|
11月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
176 12
|
12月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
310 1
|
11月前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
103 0
|
12月前
|
XML 存储 缓存
C#使用XML文件的详解及示例
C#使用XML文件的详解及示例
458 0