C# 批量复制文件
前言
项目之外,公司要求把客户上传的xls数据文件按条件拷贝一份出来,可是这些上传的文件都已经重新命过名,不过还好有上传的记录,包括文件新命名的规则.于是只需要写一个程序来批量获得这些被重新命过名的文件然后拷贝出来就行了.
正题
我是直接新建的一个aspx并在后台代码里写的,帖cs代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;
public partial class page_FilesAsEasy : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList arr = new ArrayList();
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\;Initial Catalog=test;User ID=test;Password=test";
conn.Open();
string sqlcmd;
sqlcmd = @"select * from test";
SqlCommand cmd = new SqlCommand(sqlcmd, conn);
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
FileVO vo = new FileVO();
vo.Client_Name = sdr["clientname"].ToString();
vo.Client_ID = sdr["linkshop"].ToString();
vo.Category = sdr["category"].ToString();
vo.Filename = sdr["filename"].ToString();
arr.Add(vo);
}
sdr.Close();
conn.Dispose();
Response.Write("开始拷贝文件..<br/><br/>");
Response.Flush();
foreach (object var in arr)
{
try
{
FileVO item = (FileVO)var;
//这是经过重新命名的文件的path
string from = @"E:\files\" + item.Client_ID.Trim() + "_" + item.Category.Trim() + "_" + item.Filename.Trim() + ".xls";
string Category = string.Empty;
switch (item.Category)
{
case "1":
Category = "出售";
break;
case "2":
Category = "出租";
break;
default:
Category = "购入";
break;
}
//重新命名
string to = @"F:\xlsdata\" + item.Client_Name.Trim() + "_" + Category.Trim() + ".xls";
//拷贝文件
File.Copy(from, to, true);
//设置文件属性
File.SetAttributes(to, FileAttributes.Normal);
}
catch (Exception ex)
{
Response.Write(ex.Message + "<br/>");
return;
}
}
Response.Write("<br/>拷贝文件结束..");
}
class FileVO
{
private string _Client_ID;
/// <summary>
/// 客户代号
/// </summary>
public string Client_ID
{
get { return _Client_ID; }
set { _Client_ID = value; }
}
private string _Category;
/// <summary>
/// 业务类型
/// </summary>
public string Category
{
get { return _Category; }
set { _Category = value; }
}
private string _Filename;
/// <summary>
/// 文件名
/// </summary>
public string Filename
{
get { return _Filename; }
set { _Filename = value; }
}
private string _Client_Name;
/// <summary>
/// 客户名称
/// </summary>
public string Client_Name
{
get { return _Client_Name; }
set { _Client_Name = value; }
}
}
}
注意:using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;
public partial class page_FilesAsEasy : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList arr = new ArrayList();
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\;Initial Catalog=test;User ID=test;Password=test";
conn.Open();
string sqlcmd;
sqlcmd = @"select * from test";
SqlCommand cmd = new SqlCommand(sqlcmd, conn);
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
FileVO vo = new FileVO();
vo.Client_Name = sdr["clientname"].ToString();
vo.Client_ID = sdr["linkshop"].ToString();
vo.Category = sdr["category"].ToString();
vo.Filename = sdr["filename"].ToString();
arr.Add(vo);
}
sdr.Close();
conn.Dispose();
Response.Write("开始拷贝文件..<br/><br/>");
Response.Flush();
foreach (object var in arr)
{
try
{
FileVO item = (FileVO)var;
//这是经过重新命名的文件的path
string from = @"E:\files\" + item.Client_ID.Trim() + "_" + item.Category.Trim() + "_" + item.Filename.Trim() + ".xls";
string Category = string.Empty;
switch (item.Category)
{
case "1":
Category = "出售";
break;
case "2":
Category = "出租";
break;
default:
Category = "购入";
break;
}
//重新命名
string to = @"F:\xlsdata\" + item.Client_Name.Trim() + "_" + Category.Trim() + ".xls";
//拷贝文件
File.Copy(from, to, true);
//设置文件属性
File.SetAttributes(to, FileAttributes.Normal);
}
catch (Exception ex)
{
Response.Write(ex.Message + "<br/>");
return;
}
}
Response.Write("<br/>拷贝文件结束..");
}
class FileVO
{
private string _Client_ID;
/// <summary>
/// 客户代号
/// </summary>
public string Client_ID
{
get { return _Client_ID; }
set { _Client_ID = value; }
}
private string _Category;
/// <summary>
/// 业务类型
/// </summary>
public string Category
{
get { return _Category; }
set { _Category = value; }
}
private string _Filename;
/// <summary>
/// 文件名
/// </summary>
public string Filename
{
get { return _Filename; }
set { _Filename = value; }
}
private string _Client_Name;
/// <summary>
/// 客户名称
/// </summary>
public string Client_Name
{
get { return _Client_Name; }
set { _Client_Name = value; }
}
}
}
这里最关键是以下两句代码:
//拷贝文件
File.Copy(from, to, true);
//设置文件属性
File.SetAttributes(to, FileAttributes.Normal);
特别是第二句,我花了许多时间才找到的,如果你不加这句话,那会报以下错误:File.Copy(from, to, true);
//设置文件属性
File.SetAttributes(to, FileAttributes.Normal);
The process cannot access the file 'F:\xlsdata\xxx_xxx.xls' because it is being used by another process.
OK!!批量重命名复制成功!