文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个菜鸟写的多线程删除文件的代码,大家给点意见

一个菜鸟写的多线程删除文件的代码,大家给点意见

时间:2011-05-27  来源:WILL WIN

公司图片服务器某个盘今天又满了,每次都是用一个控制台程序去删文件,我DOS命令不熟,今天突发奇想用上多线程是不是会快一些呢?然后就写了些代码,本菜鸟接触c#2年多工作1年多。代码是一个小时写完的,没有任何优化,只为实现功能,希望大家对于代码给点意见,本以为用了多线程删除的速度就会快上一点,但是与原来一个线程没什么大的变化,是不是IO瓶颈了。 using System;
using System.Collections.Generic;
using System.IO;
using System.Collections;

namespace FiledbWrite
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime timeStart = DateTime.Now;
            string path = System.Configuration.ConfigurationManager.AppSettings["path"];
           List<deletefile> allPath = new List<deletefile>();
            int I = 0;
            foreach (string file in Directory.GetDirectories(path))
            {
                    deleteFile d = new deleteFile();
                    d.originalDir = file;
                    d.tempDir = file;
                    d.deleteAction = new System.Threading.Thread(d.Action);
                    d.threadNO = I;
                    allPath.Add(d);
                    I++;
            }
            foreach (deleteFile d in allPath)
            {
                try
                {
                    d.deleteAction.Start();
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            while (true)
            {
                if (getState(allPath))
                    break;
            }
            DateTime timeEnd = DateTime.Now;
            TimeSpan timeSpan = timeEnd - timeStart;
            Console.WriteLine(string.Format("线程数:{0},总用时{1}s", I + 1, timeSpan.Seconds));
            Console.ReadLine();
        }
        //获取当前所有线程状态是否都已停止(删除完)
        public static bool getState(List</deletefile><deletefile> d)
        {
            bool over = true;
            foreach (deleteFile ddd in d)
            {
                if (ddd.deleteAction.IsAlive)
                    return false;
            }
            return over;
        }
    }
    //文件删除功能类 作者头脑简单图省事 使用多个类实现了多线程
    public class deleteFile
    {
        //线程编号
        public int threadNO = 0;
        public System.Threading.Thread deleteAction;
        /// <summary>
        /// 临时目录
        /// </summary>
        public string tempDir = string.Empty;

        /// <summary>
        /// 原始目录
        /// </summary>
        public string originalDir = string.Empty;

        public void Action()
        {
            try
            {
                //删除每个文件夹下文件
                DeleteFolderFile();
                //删除文件夹
                Directory.Delete(originalDir, true);
                //停止线程
                deleteAction.Abort();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

        public void DeleteFolderFile()
        {
            try
            {
                System.IO.File.SetAttributes(tempDir, System.IO.FileAttributes.Normal);
                foreach (string d in Directory.GetFileSystemEntries(tempDir))
                {
                    System.IO.File.SetAttributes(d, System.IO.FileAttributes.Normal);
                    if (File.Exists(d))
                    {
                        FileInfo fi = new FileInfo(d);
                        if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)//避免只读文件
                        { fi.Attributes = FileAttributes.Normal; }
                        Console.WriteLine(string.Format("当前文件:{0},当前线程:{1}", d, threadNO));
                        File.Delete(d);  //删除文件
                    }
                    else
                    {
                        try
                        {
                            tempDir = d;
                            DeleteFolderFile();//递归
                        }
                        catch (System.Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载