日期:2014-05-18  浏览次数:20717 次

【急!急!急!各位大侠!帮忙看看】关于验证文件是否存在的问题!!
我想做一个文件检测器,遇到了一个问题”
我有一个文件,我想利用程序在一个指定的文件夹中检测是否存在,但是我这个文件夹中有很多子文件夹,也有很多文件,我怎么利用 “递归”或“循环”作者道题啊 ??
我是用的 DirectoryInfo.GetDirectories() 的方法做的!,大家看看怎么做啊????谢谢了!!

------解决方案--------------------
try Directory.EnumerateFiles
nonocast.cn/你还在写递归来遍历文件吗
------解决方案--------------------
如果你能保证你的文件夹都是有权限的 那么可以直接
DirectoryInfo.GetFiles("1.exe", SearchOption.AllDirectories);
他会搜索子文件夹,
如果不能 你就要递归了
------解决方案--------------------
C# code

List<string> files = new List<string>();

void Add(string str)
{
    lock (this)
    {
        files.Add(str);
    }
}

int count = 0;

private void button2_Click(object sender, EventArgs e)
{
    files.Clear();

    DriveInfo c = new DriveInfo("c");
    Stopwatch sw = new Stopwatch();
    sw.Start();

    ThreadPool.SetMaxThreads(50, 50);
    var arr = c.RootDirectory.GetDirectories();
    count = arr.Length;
    foreach (var dir in arr)
    {
        ThreadPool.QueueUserWorkItem(getFolder2, dir);
    }


    while (count  > 0)
    {
        Application.DoEvents();
        Thread.Sleep(100);
    }
    sw.Stop();
    var s = sw.ElapsedMilliseconds.ToString() + " ms";


    MessageBox.Show(s);
    MessageBox.Show(files.Count.ToString());
    foreach (var item in files)
    {
        MessageBox.Show(item);
    }
}


void getFolder2(object folder)
{
    Queue<DirectoryInfo> dirs = new Queue<DirectoryInfo>(50);

    dirs.Enqueue((DirectoryInfo)folder);
    while (dirs.Count > 0)
    {
        var dir = dirs.Dequeue();
        try
        {
            foreach (var item in dir.GetFiles("data.mdb", SearchOption.AllDirectories))
            {
                Add(item.FullName);
            }
            continue;
        }
        catch (Exception)
        {
        }

        IEnumerable<DirectoryInfo> em ;

        try 
        {            
            em = dir.EnumerateDirectories("*", SearchOption.TopDirectoryOnly);
        }
        catch (Exception)
        {
            continue;
        }

        foreach (var d in em)
        {
            try
            {
                d.EnumerateFiles();
                dirs.Enqueue(d);
            }
            catch (Exception)
            {

            }
        }


    }

    lock (this)
    {
        count--;
    }
}

------解决方案--------------------
rivate void GetFileList(DirectoryInfo diroot)
{
foreach (FileInfo fileName in diroot.GetFiles())
{
listFile.Add(fileName.FullName);
}
foreach (DirectoryInfo dirSub in diroot.GetDirectories())
{
GetFileList(dirSub);
}
}
------解决方案--------------------
探讨

谢谢大家啊!实现了啊 !!
我是用这种方法实现 获取 指定目录下的所有文件夹和所有文件:

#region huoQuWenJian线程要执行的方法

/// <summary>
/// huoQuWenJian线程要执行的方法
/// </summary>
/// <param name="obj">指定文件的……