如何使用c#.net识别文件是文本文件还是其他文件

时间:2010-04-08 05:56:29

标签: c# .net

我需要将文件作为文本文件访问,并希望稍后处理它。但在我获取它之前,我如何识别我正在采取的文件只是一个文本文件。如果文件是另一种格式,我的整个代码会错误地解释。我想访问和处理只有文本文件。

目前我正在使用:

StreamReader objReader = new StreamReader(filePath);

我怎样才能在C#.NET中这样做?

3 个答案:

答案 0 :(得分:2)

嗯,你可以申请一些启发式方法:

  • 使用文件扩展名。如果它是“.txt”那么它可能是一个文本文件,如果它是“.jpg”,它可能不是,等等。
  • 如果你知道该文件应该是什么编码,请检查它是否在该编码中有效
  • 检查文件开头的常用“幻数”以识别各种众所周知的二进制文件类型
  • 如果它是一个西方文档,请检查如果您将文件作为文本文件读取,大多数文件具有相对较低的Unicode值(通常小于U + 0100,但您可能希望查看各种Unicode代码图表自己决定)
  • 除了回车,换行和标签
  • 之外,文字文件往往没有U + 0020以下的多个字符

但基本上它都是启发式的。在一天结束时,文件是名称和一些字节,以及有关访问权限的一些元数据。在某些文件系统中,可以有更多可用的元数据,但是在复制文件时通常很难获得并且通常不会保留 - 因此不应该依赖于此。

答案 1 :(得分:0)

如果您想获得文件的扩展名,可以使用

Path.GetExtension 方法

答案 2 :(得分:0)

  

如果文件是另一种格式,我的整个代码会错误地解释。

当然,如果您期望文本文件并最终获得二进制文件,您的代码将错误地解释它。但是对于任何无效的文本文件也是如此:如果你期望它不是逗号分隔的话怎么办?或者不是json,那就是你想要的?或者是你无法处理的编码?

关键是,除非你只是复制文本或用它做一些非常低级的东西,否则你需要比文本和二进制更多的检查。你应该(可能)检查整个文件是否符合你的需要。这将捕获传入您的程序的任何非文本文件!