我有个文件夹 back 姑且就叫 back 吧
下面有N个子文件夹
back1 back2 back3 back4 现在的任务是读取这些子文件
然后读子文件下的所有文件 、
得出最后修改时间(针对没一个子文件)
要用控制台 汗 、 谢谢大伙了
下面有N个子文件夹
back1 back2 back3 back4 现在的任务是读取这些子文件
然后读子文件下的所有文件 、
得出最后修改时间(针对没一个子文件)
要用控制台 汗 、 谢谢大伙了
解决方案 »
- 如果用HttpRequest或者其他方法下载URL以点号结尾的图片?
- 怎么删除webbrowser访问过的指定网页的缓存,比如删除www.baidu.com的缓存
- C#单击鼠标右键选中当前的行
- 关于C#中数据库操作的一个问题
- 怎么把 arraylist里的内容赋给一个textbox
- 屏幕截图的一个问题
- 如何实现鼠标移动到某个点上时,旁边会自动的显示详细信息
- 在remonting中,关于接口的使用问题,请大家讨论。(人穷,没分,但我会一辈子感激各位的)
- DLL文件的镶入问题
- 这样的系统调用如何实现?
- 不知道什么原因,UpdatePanel刷新DropDownList的问题
- Socket连接问题,困惑几天了!
// 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);
}
}
{
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); //递归
}
}
}
按每个子文件来分的
{
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); //递归
}
}
}搞定
我要对子文件分别统计
也就是问题中提到的 back1,back2 。
中的文件分别统计
而back1 什么的是首先分析 back 这个文件得到的
也就是说 我只知道back 这个文件的路径。 要分开统计他下一级的文件,并且得到最后修改的文件的日期
{
if (dic[dirInfo.FullName] < fileInfo.LastWriteTime)
dic[dirInfo.FullName] = fileInfo.LastWriteTime;
else
continue;
}
不包含对 contains 的定义
using System.Collections.Generic;
你连我的代码都没有跑。就说功能没有实现。汗。
if (dic.ContainsKey(dirInfo.FullName))替换if (dic.Keys.Contains(dirInfo.FullName))
我的意思是:
文件夹叫:serverbackup
里面有:host01,host02,host03 等等(不确定)
首先是要得到 serverbackup 的下一级 也就是 host01,host02,host03 等等
然后就要对 host01,host02 分别统计(这里的host01,host02 里的子级有多少都是未知的)
最后就是host01,host02 里得出最后写入时间 。
是host01 中文件的最后写入时间:xx-xx-xx
host02 xx-xx-xx
去掉不要的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]);
}
计算hsot01 下 这段时间(2009-09-04至2009-09-24)写入的文件的大小的和!
{
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);
}
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;
}
這個改成你自己的Class名
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);
}
}
}
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); //递归
}
}
}
只要得到 host01 下最新写入的文件的时间
其他都不管 。
host01 下 不管他有多少文件数 。 只取最后写入的那个文件 他的时间。
只需要第一级 也就是 host01 那一级!
也就是host01里面所有的文件中 最后写的那个时间 。
其他的文件夹不需要列出来 、
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();
}
}
}
只知道他的上级文件是 serverbackup
我统计是针对 host01 而言的 也就是他下面的所有的文件 取最新写入的那个
当然每个serverbackup下一级的都会是这样的(host02 , 03 , 04 )
不知道这下有没说清楚 ...