以下是我这几天做读取CSV文件winform的技术小总结
1.首先是CSV文件的读取
利用C#中的streamreader 类
1.首先利用CSV文件的绝对路径初始化streamreader类,
2.然后利用该类的一行一行的ReadLine方法读取CSV文件中的数据
3.利用while循环判断该类的PeeK方法的返回值是否为-1(判断下一行数据是否可读取),以确定循环结束条件
4.在循环中将读取到的字符串按照分隔符分隔为字符串数组
5.根据字符串数组的长度在新建的datatable中添加相应的列,列名为第一行数据的内容(CSV文件第一行数据为列名)
6.向datatable中添加数据:新建datarow 根据字符串数组长度依次向datarow中赋值,然后在datatable中添加该赋值的datarow
7.读取结束后关闭streamreader类实例
8.至此已经将CSV文件中的数据读到一个datatable中了
2.数据存入数据库
主要是利用C#中的sqlBulkCopy类
1.首先是利用一个sqlconnection类实例实例化sqlBulkcopy(此处确定复制的目标数据库)
2.设置目标表:利用sqlBulkCopy中的DestinationTableName属性
3.绑定:数据源列和目标表列:利用sqlBulkCopy的ColumnMapping方法中的Add方法绑定所有的列:
eg: iSqlBulkCopy.ColumnMappings.Add("Vs", "Vs");//前面的是数据源的列名,后面是目标表的列名
iSqlBulkCopy.ColumnMappings.Add("PHs", "PHs");
iSqlBulkCopy.ColumnMappings.Add("PRs", "PRs");
iSqlBulkCopy.ColumnMappings.Add("PMs", "PMs");
4.绑定完所有的列后,打开数据库连接:利用实例化参数sqlconnection的open方法
5.执行数据复制操作:利用SQLBulkCopy类中的writeToServer方法,参数为数据表datatable:
eg: iSqlBulkCopy.WriteToServer(iDataTable);//复制数据
6.至此数据复制完成
3.扫瞄指定文件夹下的CSV文件
利用C#中的DirectoryInfo类
1.首先是实例化该类,实例化参数为指定的路径
2.利用DirectoryInfo类中的Exists 方法判断参数目录是否存在
3.若存在则将DirectoryInfo类传递给一个新从DirectoryInfo类(???);不存在则退出
4.利用DirectoryInfo类中的GetFileSystemInfos()方法获取指定目录下所有的文件的集合为一个FileSystemInfo的数组
5.利用foreach遍历FileSystemInfo数组中的所有的FileSystemInfo对象
6.在遍历循环中判断FileSystemInfo的Name属性的最后四个字符是否为“.CSV”(过滤出CSV文件)
7.至此达到扫瞄出指定目录下所有CSV文件的目的
——若为CSV文件,首先调用读取CSV文件数据函数读取数据,然后存储数据,然后开始移动文件--
4.文件移动
利用FileInfo类
1.首先实例化FileInfo类,实例化参数为要移动的文件的绝对路径(包含文件名)
2.执行FileInfo类中的MoveTo方法,方法参数为移动新位置的绝对路径(包含文件名)
3.文件移动完成
5.Log文件(TXT)新建以及信息追加
主要利用FileStream类和StreamWriter类
1.首先利用静态类File的Exists方法判断要新建的文件是否存在
2.若不存在,则利用绝对路径(含新建文件的名称)实例化FileStream类
3.利用FileStream的Close方法关闭FileStream
4.至此实现文件的新建
5.信息追加:首先实例化StreamWriterLei 实例化参数为,要写入文件的绝对路径(含文件名),是否在文件不存在是创建该文件;
6.利用StreamWriter的WriteLine方法向文件中追加一行数据,参数为要追加的string内容
7.利用StreamWriter的Flush方法清除编写器缓冲区数据,并使缓冲区数据写入基础流
8.关闭StreamWriter
9.至此信息追加完成。
6.定时器功能
主要是利用Syste中的Timers中的Timer类
1.首先实例化私有的Timer类,无参数
2.设定定时器触发时间间隔即定时间隔:利用Timer类中的Interval属性
3.设置定时器为每次定时间隔结束发生:利用Timer类中的AutoReset属性
4.订阅定时发生事件:
eg:itimer.Elapsed += new ElapsedEventHandler(TimerElapsed);
5.启动定时器:start()方法
6.订阅事件中的(TimerElapsed)方法为每次定时结束执行的函数参数签名为void (object,ElapsedEventArgs)Function
7.(TimerElapsed)中首先停止定时器:stop()方法(目的是为了精确定时,让定时间隔不计算程序运行时间)
8.执行定时操作
9.开始定时器:start();
10.至此定时器功能完成。