C# 模板文件比对——增强版
来源:互联网 发布:如何成为一个美工 编辑:程序博客网 时间:2024/04/27 13:49
前言
之前讨论过这个话题,具体参见C#模板文件比对,但只讨论了上传文件与模板文件的字段名称
是否能够对应,而没有讨论二者关于字段类型、字段长度的对比。此次,将在前文的基础之上,重点讨论字段的类型和长度是否能够匹配。
辅助知识
DataTable 里可以获取列的集合DataColumnCollection,遍历即可得到每一个字段的名称。 但不能得到字段类型和长度。
思路
回顾最初的目的:对比上传文件与模板是否能够对应(匹配
)。
此处的匹配
,指的是完全一样,即字段个数,字段名称,字段类型,字段长度。
那么问题便转换成了如何获取模板文件和上传文件的字段名称
,字段类型
和字段长度
。
解决办法
1.字段名称的获取
字段名称的获取,可以通过将模板文件和上传文件转换成相同的格式(此处是DataTable
)来获取。
常见的模板格式是DBF
和EXCEL
DBF文件的解析与封装参见C#封装DBF文件到DataTable
EXCEL文件的解析与封装参见C#封装EXCEL文件到DataTable
2.字段类型和长度获取
原始文件(模板
和上传文件
)
- 缺点:很难直接获取字段名
- 优点:能够获取字段的类型和长度
3.实现流程
通过将其转换成DataTable,进而获取二者字段名的集合。以字段名为依据,对比相应的字段类型和长度。
以DBF文件为例,实现对比模板文件的精确对比
public static Boolean IsSameFormat(string initName, string testName) { DataColumnCollection initDCC = DbfToDataTable(initName).Columns; DataColumnCollection testDCC = null; //1.判断内容是否为DBF文件 try { testDCC = DbfToDataTable(testName).Columns; } catch (Exception) { return false; } //2.判断列的个数是否相同 if (initDCC.Count != testDCC.Count) {//列的个数不相同,直接报错 return false; } DbfFile dbf = new DbfFile(Encoding.Default); dbf.Open(initName, FileMode.OpenOrCreate); DbfHeader initHeader = dbf.Header; dbf.Open(testName, FileMode.OpenOrCreate); DbfHeader testHeader = dbf.Header; dbf.Close(); //3.判断列名是否相同 for (int i = 0; i < initDCC.Count; i++) { DataColumn initDTC = initDCC[i]; if (testDCC.Contains(initDTC.ColumnName))//1.判断列名 { //4.在列名相同的基础上,判断类型长度是否相同 DbfColumn ininDbfC = initHeader[initDTC.ColumnName]; DbfColumn testDbfC = testHeader[initDTC.ColumnName]; if ((ininDbfC.ColumnType == testDbfC.ColumnType) && (ininDbfC.Length == testDbfC.Length) && (ininDbfC.DecimalCount == testDbfC.DecimalCount)) { continue; } else { return false; } } else { return false; } } return true; }
0 0
- C# 模板文件比对——增强版
- C#模板文件比对
- c#图片比对
- linux文件比对工具——diff
- WinMerge —— 强大的文件比对/合并工具
- 批量文件比对
- 文件比对工具
- 文件比对.
- 文件比对
- 关于文件比对
- C#多线程指纹比对
- 数字图像处理—空域变换增强之滤波增强(模板操作)(模板卷积)
- C#对Excel文件模板的完全读取
- 对HtmlEncode的增强——HtmlEntitiesEncode
- Linux awk 比对文件
- 比对近似文件代码
- perl学习—文本比对程序
- C# 版本号字符串进行比对大小
- 排序算法2--简单选择排序、堆排序
- 用Executors来创建三种java的自带线程池
- pta 习题集 5-17九宫格输入法
- 基于 树莓派&opencv&face++开发考勤机(一)
- Failed to import pydot
- C# 模板文件比对——增强版
- java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor versi
- Openlayers WFS 跨域问题解决思路
- LeetCode 461. Hamming Distance
- java权限修饰符作用域
- JAVA4种线程池的使用
- 100. Same Tree
- 3幅图让你了解Spring AOP
- QQ自动登陆器