天天看點

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("開始拷貝檔案

C# 批量複制檔案

..<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 = "出租";

                    default:

                        category = "購入";

                }

                //重新命名

                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/>拷貝檔案結束

C# 批量複制檔案

..");

    }

    class filevo

        private string _client_id;

        /// <summary>

        /// 客戶代号

        /// </summary>

        public string client_id

            get { return _client_id; }

            set { _client_id = value; }

        private string _category;

        /// 業務類型

        public string category

            get { return _category; }

            set { _category = value; }

        private string _filename;

        /// 檔案名

        public string filename

            get { return _filename; }

            set { _filename = value; }

        private string _client_name;

        /// 客戶名稱

        public string client_name

            get { return _client_name; }

            set { _client_name = value; }

}

注意:

    這裡最關鍵是以下兩句代碼:

//拷貝檔案

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!!批量重命名複制成功!

轉載:http://www.cnblogs.com/over140/archive/2007/12/07/986326.html