我有个文件夹 back 姑且就叫 back 吧
下面有N个子文件夹
back1 back2 back3 back4 现在的任务是读取这些子文件
然后读子文件下的所有文件 、
得出最后修改时间(针对没一个子文件)
要用控制台  汗 、 谢谢大伙了

解决方案 »

  1.   

    这个就是递归啊,一层层找就行了用控制台跟不用控制台没什么区别,看看MSDN的例子吧// For Directory.GetFiles and Directory.GetDirectories
    // For File.Exists, Directory.Exists
    using System;
    using System.IO;
    using System.Collections;public class RecursiveFileProcessor 
    {
        public static void Main(string[] args) 
        {
            foreach(string path in args) 
            {
                if(File.Exists(path)) 
                {
                    // This path is a file
                    ProcessFile(path); 
                }               
                else if(Directory.Exists(path)) 
                {
                    // This path is a directory
                    ProcessDirectory(path);
                }
                else 
                {
                    Console.WriteLine("{0} is not a valid file or directory.", path);
                }        
            }        
        }
        // Process all files in the directory passed in, recurse on any directories 
        // that are found, and process the files they contain.
        public static void ProcessDirectory(string targetDirectory) 
        {
            // Process the list of files found in the directory.
            string [] fileEntries = Directory.GetFiles(targetDirectory);
            foreach(string fileName in fileEntries)
                ProcessFile(fileName);        // Recurse into subdirectories of this directory.
            string [] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
            foreach(string subdirectory in subdirectoryEntries)
                ProcessDirectory(subdirectory);
        }
            
        // Insert logic for processing found files here.
        public static void ProcessFile(string path) 
        {
            Console.WriteLine("Processed file '{0}'.", path);     
        }
    }
      

  2.   

     static void Main(string[] args)
            {
                getFileLastAccessTime(@"D:\BBS");
                Console.Read();
            }        static void getFileLastAccessTime(string filePath)
            {
                if (string.IsNullOrEmpty(filePath))
                    return;
                DirectoryInfo dirInfo = new DirectoryInfo(filePath);
                FileInfo[] fileInfos = dirInfo.GetFiles();            //文件            foreach (FileInfo fileInfo in fileInfos)
                {
                    //DateTime.Compare( fileInfo.LastWriteTime,DateTime.Now);
                    Console.WriteLine(fileInfo.LastAccessTime);
                }            //目录
                DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
                if (dirInfos != null && dirInfos.Length > 0)
                {
                    foreach (DirectoryInfo childDirInfo in dirInfos)
                    {
                        getFileLastAccessTime(childDirInfo.FullName); //递归
                    }
                }
            }
      

  3.   

    是读取 back1 ,back 2 下所有文件 然后得到最后修改时间 
    按每个子文件来分的
      

  4.   

     static void Main(string[] args)
            {
                Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();                      getFileLastAccessTime(@"D:\BBS", ref dic);
                foreach (string s in dic.Keys)
                {
                    Console.WriteLine(s);
                    Console.WriteLine(dic[s]);
                }
                Console.Read();
            }
            static void getFileLastAccessTime(string filePath, ref Dictionary<string, DateTime> dic)
            {
                if (string.IsNullOrEmpty(filePath))
                    return;
                DirectoryInfo dirInfo = new DirectoryInfo(filePath);
                FileInfo[] fileInfos = dirInfo.GetFiles();            //文件            foreach (FileInfo fileInfo in fileInfos)
                {                if (dic.Keys.Contains(dirInfo.FullName))
                    {
                        if (dic[dirInfo.FullName] < fileInfo.LastAccessTime)
                            dic[dirInfo.FullName] = fileInfo.LastAccessTime;
                        else
                            continue;
                    }
                    else
                    {
                        dic.Add(dirInfo.FullName, fileInfo.LastAccessTime);
                    }
                }            //目录
                DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
                if (dirInfos != null && dirInfos.Length > 0)
                {
                    foreach (DirectoryInfo childDirInfo in dirInfos)
                    {
                        getFileLastAccessTime(childDirInfo.FullName, ref dic); //递归
                    }
                }
            }搞定
      

  5.   


    我要对子文件分别统计
    也就是问题中提到的 back1,back2 。
    中的文件分别统计
    而back1 什么的是首先分析 back 这个文件得到的
    也就是说  我只知道back 这个文件的路径。 要分开统计他下一级的文件,并且得到最后修改的文件的日期
      

  6.   

    现在的实现功能不就是分别对一个目录下,及子目录下文件进行分析,得到最后访问时间吗?如果需要的是最后修改时间只需要把LastAccessTime改成LastWriteTime即可。
      

  7.   

    你的代码本身就有错误:static void getFileLastAccessTime(string filePath, ref Dictionary <string, DateTime> dic) 而且我是需要对子文件分别统计。 是分别哦 、
      

  8.   

    代码错误static void getFileLastWriteTime(string filePath, ref Dictionary<string, DateTime> dic)  这一句提示  找不到类型或者命名空间名称  我是菜鸟 。 所以请谅解
      

  9.   

     if (dic.Keys.Contains(dirInfo.FullName))
                    {
                        if (dic[dirInfo.FullName] < fileInfo.LastWriteTime)
                            dic[dirInfo.FullName] = fileInfo.LastWriteTime;
                        else
                            continue;
                    }
    不包含对 contains 的定义
      

  10.   

    引入命名空间
    using System.Collections.Generic;
    你连我的代码都没有跑。就说功能没有实现。汗。
      

  11.   

    错误 1 “System.Collections.Generic.Dictionary<string,System.DateTime>.KeyCollection”并不包含“Contains”的定义 D:\Demo\GetFileInfo\ConsoleApplication1\ConsoleApplication1\Program.cs 35 30 ConsoleApplication1
      

  12.   

    哦。那估计你用的是vs2005吧。不好意思。我这里用的是08.默认用了framework3.5
      

  13.   

    没关系。你稍微改一下就行了用
     if (dic.ContainsKey(dirInfo.FullName))替换if (dic.Keys.Contains(dirInfo.FullName)) 
      

  14.   

    可能是我表述错误!
    我的意思是:
    文件夹叫:serverbackup
    里面有:host01,host02,host03 等等(不确定)
    首先是要得到 serverbackup 的下一级  也就是 host01,host02,host03 等等
    然后就要对 host01,host02 分别统计(这里的host01,host02 里的子级有多少都是未知的)
    最后就是host01,host02 里得出最后写入时间 。
    是host01 中文件的最后写入时间:xx-xx-xx
      host02                    xx-xx-xx
      

  15.   

    那我这里就是多了一级serverbackup文件下的文件时间。去掉就行了
      

  16.   

    我这里收集的信息都在dic里面
    去掉不要的remove就行了。
                Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();
                FileOp.getFileLastAccessTime(@"D:\BBS", ref dic);
                if (dic.ContainsKey(@"D:\BBS"))
                    dic.Remove(@"D:\BBS");
               foreach (string s in dic.Keys)
                {                Console.WriteLine(s);
                    Console.WriteLine(dic[s]);
                }
      

  17.   

    host01的最后创建文件的时间是 2009-09-24, 往前推20天就是 2009-09-04
    计算hsot01 下 这段时间(2009-09-04至2009-09-24)写入的文件的大小的和!
      

  18.   

    static void Main(string[] args)
            {
                string filePath = @"H:\back";
                Program prg = new Program();
                prg.ProcessFolder(filePath);
                Console.Read();
            }
            public void ProcessFolder(string dir)
            {
                if (Directory.Exists(dir))
                {
                    GetFileList(dir);
                    foreach (string d in Directory.GetFileSystemEntries(dir))
                    {
                        if (Directory.Exists(d))
                        {
                            ProcessFolder(d);
                        }
                    }
                }
            }
            public void GetFileList(string dir)
            {
                string[] FileList = Directory.GetFiles(dir);
                if (FileList.Length > 0)
                {
                    Console.WriteLine("Folder:" + dir + ", File Count:" + FileList.Length);
                    Console.WriteLine("****************************************************************");
                    for (int i = 0; i < FileList.Length; i++)
                    {
                        GetFileLastWriteTime(i, FileList[i]);
                    }
                }
            }
            public void GetFileLastWriteTime(int fileID,string filePath)
            {
                FileInfo fi = new FileInfo(filePath);
                string dt=fi.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss");
                Console.WriteLine("ID:" + fileID + "FileName:" + Path.GetFileName(filePath) + "DateTime:" + dt);
            }
      

  19.   

    针对你后来提出的需求。增加了一个函数,调用示例: Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();
                FileOp.getFileLastAccessTime(@"D:\BBS", ref dic);
                if (dic.ContainsKey(@"D:\BBS"))
                    dic.Remove(@"D:\BBS");
                foreach (string s in dic.Keys)
                {                Console.WriteLine(s);
                    Console.WriteLine(dic[s]);
                    Console.WriteLine(GetFileLength(s, dic[s]));
                }
     static long GetFileLength(string path, DateTime dt)
            {
                long result = 0L;
                DirectoryInfo dirInfo = new DirectoryInfo(path);
                FileInfo[] fileInfos = dirInfo.GetFiles();
                foreach (FileInfo fileInfo in fileInfos)
                {
                    if (fileInfo.LastWriteTime > dt.AddDays(-20) && fileInfo.LastWriteTime < dt)
                    {
                        result += fileInfo.Length;
                    }
                }
                return result;
            }
      

  20.   

      Program prg=new Program(); 
    這個改成你自己的Class名
      

  21.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;namespace CTEST
    {
        class Program
        {
            static void Main(string[] args)
            {
                string filePath = @"H:\back";
                Program prg = new Program();
                prg.ProcessFolder(filePath);
                Console.Read();
            }
            public void ProcessFolder(string dir)
            {
                if (Directory.Exists(dir))
                {
                    GetFileList(dir);
                    foreach (string d in Directory.GetFileSystemEntries(dir))
                    {
                        if (Directory.Exists(d))
                        {
                            ProcessFolder(d);
                        }
                    }
                }
            }
            public void GetFileList(string dir)
            {
                string[] FileList = Directory.GetFiles(dir);
                if (FileList.Length > 0)
                {
                    Console.WriteLine("Folder:" + dir + ", File Count:" + FileList.Length);
                    Console.WriteLine("****************************************************************");
                    for (int i = 0; i < FileList.Length; i++)
                    {
                        GetFileLastWriteTime(i, FileList[i]);
                    }
                }
            }
            public void GetFileLastWriteTime(int fileID,string filePath)
            {
                FileInfo fi = new FileInfo(filePath);
                string dt=fi.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss");
                Console.WriteLine("ID:" + fileID + "FileName:" + Path.GetFileName(filePath) + "DateTime:" + dt);
            }
        }
    }
      

  22.   

    完整代码:
     static void Main(string[] args)
            {
                Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();
                FileOp.getFileLastAccessTime(@"D:\BBS", ref dic);
                if (dic.ContainsKey(@"D:\BBS"))
                    dic.Remove(@"D:\BBS");
                foreach (string s in dic.Keys)
                {                Console.WriteLine("文件夹:"+s);
                    Console.WriteLine("文件夹下文件最后修改时间:"+dic[s]);
                    Console.WriteLine("20天期间增加文件大小:"+GetFileLength(s, dic[s]));
                    Console.WriteLine("---------------------------------------------------");
                }
                Console.Read();
            }        static long GetFileLength(string path, DateTime dt)
            {
                long result = 0L;
                DirectoryInfo dirInfo = new DirectoryInfo(path);
                FileInfo[] fileInfos = dirInfo.GetFiles();
                foreach (FileInfo fileInfo in fileInfos)
                {
                    if (fileInfo.LastWriteTime > dt.AddDays(-20) && fileInfo.LastWriteTime < dt)
                    {
                        result += fileInfo.Length;
                    }
                }
                return result;
            }
            static void getFileLastAccessTime(string filePath, ref Dictionary<string, DateTime> dic)
            {
                if (string.IsNullOrEmpty(filePath))
                    return;
                DirectoryInfo dirInfo = new DirectoryInfo(filePath);
                FileInfo[] fileInfos = dirInfo.GetFiles();
                //文件
                foreach (FileInfo fileInfo in fileInfos)
                {
                    if (dic.ContainsKey(dirInfo.FullName))
                    {
                        if (dic[dirInfo.FullName] < fileInfo.LastWriteTime)
                            dic[dirInfo.FullName] = fileInfo.LastWriteTime;
                        else
                            continue;
                    }
                    else
                    {
                        dic.Add(dirInfo.FullName, fileInfo.LastWriteTime);
                    }
                }
                //目录
                DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
                if (dirInfos != null && dirInfos.Length > 0)
                {
                    foreach (DirectoryInfo childDirInfo in dirInfos)
                    {
                        getFileLastAccessTime(childDirInfo.FullName, ref dic); //递归
                    }
                }
            }
      

  23.   

    我的表述能力有这么差么 、 汗 
    只要得到 host01 下最新写入的文件的时间
    其他都不管 。  
    host01 下  不管他有多少文件数 。 只取最后写入的那个文件  他的时间。
      

  24.   

    有点接近了,但是还是没去掉子目录!
    只需要第一级  也就是 host01 那一级!
      

  25.   


    也就是host01里面所有的文件中  最后写的那个时间 。
    其他的文件夹不需要列出来 、
      

  26.   

    那你直接传d:\back\host01不就行了
      

  27.   

    完整代码如下,在vs2005下测试通过:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;namespace test111
    {
        class Program
        {
            static void Main(string[] args)
            {
                string bootDir = @"F:\开发工具"; // 改成自己需要的目录
                string[] subDir = Directory.GetDirectories(bootDir);            DateTime maxdtfile;
                string maxfilename = "";
                string[] filelist;
                FileInfo fi;            foreach (string dir1 in subDir)
                {
                    maxdtfile = new DateTime(1900, 1, 1);
                    filelist = Directory.GetFiles(dir1, "*.*", SearchOption.AllDirectories);
                    foreach (string filename in filelist)
                    {
                        fi = new FileInfo(filename);
                        if (fi.LastWriteTime > maxdtfile)
                        {
                            maxdtfile = fi.LastWriteTime; // 最近的时间
                            maxfilename = filename; // 最近时间的文件
                        }
                    }
                    Console.WriteLine(string.Format("目录:{0}下最近的日期为:{1},文件为:{2}", dir1, maxdtfile, maxfilename));
                }            Console.ReadLine();
            }
        }
    }
      

  28.   

    您误会了.我的意思是 host01 这些文件是不确定的 
    只知道他的上级文件是 serverbackup
    我统计是针对 host01 而言的  也就是他下面的所有的文件 取最新写入的那个
    当然每个serverbackup下一级的都会是这样的(host02 , 03 , 04 )
    不知道这下有没说清楚  ...