科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用Visual C#实现文件大批量处理

用Visual C#实现文件大批量处理

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在大量数据处理的时侯,有时需要进行多对一,或一对多的文件操作,即多个数据文件与一个数据文件进行信息交互

作者:王炜 胡望水 来源:天极网 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、源程序主要代码:

  1、名字空间

using System;using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
//使用StreamWriter与StreamReader必须加的Namespaceusing
System.Data.OleDb;
using System.Data.SqlClient;
//读电子表格文件必须加的Namespace

  2、文件合并按钮响应方法

string winDir1;
//源文件路径
string winDir2;
//目标文件路径
string temp1;
int ii;
winDir1=textBox1.Text.Trim();
winDir2=textBox2.Text.Trim()+"\\total.txt";
//获取winDir1路径下所有文件列表
string[] dirs = Directory.GetFiles(winDir1);
//建立或打开目标文件
StreamWriter writer = new StreamWriter(winDir2);
writer.WriteLine("这是汇总文件头");
writer.WriteLine("这是汇总文件第二行");
ii=0;
foreach(string dir in dirs)
{
 StreamReader reader=new StreamReader(dir);
 try
 {
  reader.ReadLine();
  do
  {
   temp1=reader.ReadLine();
   temp1=temp1.Trim();
   writer.WriteLine(temp1);
  }
  while(reader.Peek() != -1);
   ii=ii+1;
 } catch( Exception err)
 {
  MessageBox.Show(err.Message);
 }
 finally
 {
  reader.Close();
 }
}
addListItem("合并操作结束");
addListItem("本次操作共有"+ii.ToString()+"个文件合并到文件total.txt中去");
addListItem("total.txt文件存放位置为"+textBox2.Text);
writer.Close();

  3、文件拆分按钮响应方法

//定义变量
string winDir;
//文件路径
string filename;
//结果文件名
string [] filename2=new string[300];
//保存生成的文件名
string temp1,temp2,temp3,temp4;
string strCon;
//连接串
int ii;
//统计生成的结果文件数
ii=1;
winDir=textBox2.Text.Trim()+@"\xcsj.xls;";
//创建一个数据链接
strCon= " Provider = Microsoft.Jet.OLEDB.4.0 ;
Data Source ="+winDir+"Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM [Sheet1$] " ;
myConn.Open ( ) ;
//打开数据链接,得到一个数据集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
//创建一个
DataSet对象 DataSet myDataSet = new DataSet ( ) ;
//得到自己的DataSet对象
myDataSet
try
{
 myCommand.Fill ( myDataSet , "[Sheet1$]" ) ;
} catch( Exception err)
{
 MessageBox.Show(err.Message);
}
//根据电子表格中第一列的井号读出井名到数组中去
temp1=myDataSet.Tables[0].Rows[0][0].ToString().Trim();
filename2[ii]=temp1;
foreach ( DataRow row in myDataSet.Tables[0].Rows )
{
 if (temp1!=row[0].ToString().Trim() )
 {
  ii=ii+1;
  filename2[ii]=row[0].ToString();
  temp1=row[0].ToString().Trim();
 }
}
//进度条初始化
progressBar1.Step=1;
progressBar1.Minimum=1;
progressBar1.Maximum=ii;
winDir=textBox2.Text.Trim();
for(int k=1;k<=ii;k++)
{
 filename=@winDir+"\\"+filename2[k].Trim()+".xc";
 StreamWriter writer = new StreamWriter(filename);
 writer.WriteLine("层位 细分小层号 层顶深度 层厚");
 foreach( DataRow row in myDataSet.Tables[0].Rows )
 {
  temp1=row[1].ToString().Trim();
  temp2=row[2].ToString().Trim();
  temp3=row[3].ToString().Trim();
  temp4=row[4].ToString().Trim();
  writer.WriteLine(temp1+" "+temp2+" "+temp3+" "+temp4);
 }
 writer.Close();
 progressBar1.PerformStep();
}
myConn.Close();
addListItem("操作结果");
addListItem("共生成"+ii.ToString()+"文件");
addListItem(@"文件位置:F:\wangwei\work\h12\xc路径下");
listBox1.Refresh();

  4、为显示执行结果添加了一上列表框,为方便操作列表框需要为表单类添加一个方法:

private void addListItem(string value)
{
 this.listBox1.Items.Add(value);
}

  五、要点分析

  1、用StreamWriter与StreamReader类进行文件存取操作

  这是一对从 Stream 派生的类,用于字节的输入和输出。其名字空间为 system.io

  2、读取电子表数据

  本程序提供了一种连接电子表文件的方法,必要的名字空间要加好,注意连接串不要写错。

  3、Directory类的GetFiles 方法应用

  可以程序自动的读出文件列表到到一个标准数组中去,以备进一步使用,选取文件的方法有多种,这种方法体现了C#的高效性,值得向大家推荐。

  说明:本文附源程序,在运行的时侯注意输入正确的文件路径。若你机器里面没装.net,也可以直接运行已经编译好的执行文件。在\bin\debug子文件夹下面的Csdata.exe。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章