【发布时间】:2013-01-22 01:06:10
【问题描述】:
我正在做的项目列表的一部分是一个小文本编辑器。
At one point, you can load all the sub directories and files in a given directory. 程序会将每个节点添加为 TreeView 中的一个节点。
我想要的功能是只添加普通文本阅读器可读的文件。
此代码当前将其添加到树中:
TreeNode navNode = new TreeNode();
navNode.Text = file.Name;
navNode.Tag = file.FullName;
directoryNode.Nodes.Add(navNode);
我知道我可以轻松地创建一个 if 语句,例如:
if(file.extension.equals(".txt"))
但我必须扩展该语句以包含它可能的每一个扩展。
有没有更简单的方法来做到这一点?我认为这可能与 mime 类型或文件编码有关。
【问题讨论】:
-
这取决于“普通文本编辑器可读”的含义。一旦你确定了这一点,你的道路就会更加清晰。例如:仅包含 ASCII 字符或是正确编码的 UTF-8 文件,仅包含可打印字符。
-
我会说只包含 ASCII 字符,我可以从那里移动。
-
没有 100% 的方法.. 最好的方法是扩展和对前约 1024 个字节的数据进行采样,看看它是否满足您的需求。
-
Simon 说的差不多。要验证 ASCII 编码,您可以过滤掉大于 0x7F 的字节和那些表示控制字符的字节,但这在大文件上会很慢(您将遍历每个字节)。最好使用一些启发式方法,比如只查看文件的前几千字节。小心限制自己使用 ASCII - Unicode 现在非常流行,你会在最不期望的地方找到非 ASCII 的东西。不要为 UTF-8 滚动你自己的等价物——这太难了。使用 .NET 的内置内容 - 从
System.Char开始。 -
我会试着玩弄一些东西。谢谢!
标签: c# file text encoding human-readable