读文件信息的一系列问题 ,急急急 。。。

是时候重装系统了 2009-09-24 01:40:45
我有个文件夹 back 姑且就叫 back 吧
下面有N个子文件夹
back1 back2 back3 back4 。。。

现在的任务是读取这些子文件
然后读子文件下的所有文件 、
得出最后修改时间(针对没一个子文件)
要用控制台 汗 、 谢谢大伙了
...全文
257 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
纸纸纸纸飞飞 2009-09-24
  • 打赏
  • 举报
回复
貌似,做的事与岗位不一定相关。
看你是否愿意做,如果不愿意做,当初不答应就OK。答应做了,不会的就多学学吧。
  • 打赏
  • 举报
回复
谢谢大伙的支持,在这里鞠躬感谢
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 a6711145 的回复:]
LZ 真是的,再怎麼菜,到現在也該能自己把代碼修改了吧,
還這麼窮追不捨啊!!
[/Quote]
我是网管 不是程序员
a6711145 2009-09-24
  • 打赏
  • 举报
回复
LZ 真是的,再怎麼菜,到現在也該能自己把代碼修改了吧,
還這麼窮追不捨啊!!
  • 打赏
  • 举报
回复
[Quote=引用 50 楼 zyxlsh 的回复:]
要求出最新时间和前20天时间内创建的文件的总大小,只需在原代码上做相应修改即可。
框架的代码已经出来了,就加点小功能完善而已。

[/Quote]
可我是菜鸟,公司的网管而已 .就想写个程序来监控备份信息 ...
实在是不知道下手 就辛苦您了 谢谢 . 您就帮忙帮到底 .
纸纸纸纸飞飞 2009-09-24
  • 打赏
  • 举报
回复
要求出最新时间和前20天时间内创建的文件的总大小,只需在原代码上做相应修改即可。
框架的代码已经出来了,就加点小功能完善而已。
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 zyxlsh 的回复:]
可能效率不是最高的,但可以满足LZ的要求。
只管了功能的实现。
[/Quote]
貌似就是这样 呵呵 多谢了 ... 但是还有需求没完成 呵呵
加把劲 多谢拉 . 那就是最新时间 往前推20天 然后求最新时间和前20天时间内创建的文件的总大小

嗯 就是这样了 ! 多谢多谢多谢多谢多谢多谢多谢
纸纸纸纸飞飞 2009-09-24
  • 打赏
  • 举报
回复
可能效率不是最高的,但可以满足LZ的要求。
只管了功能的实现。
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 huming_h 的回复:]
那你直接传d:\back\host01不就行了
[/Quote]
您误会了.我的意思是 host01 这些文件是不确定的
只知道他的上级文件是 serverbackup
我统计是针对 host01 而言的 也就是他下面的所有的文件 取最新写入的那个
当然每个serverbackup下一级的都会是这样的(host02 , 03 , 04 )
不知道这下有没说清楚 ...
纸纸纸纸飞飞 2009-09-24
  • 打赏
  • 举报
回复
完整代码如下,在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();
}
}
}
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 zyxlsh 的回复:]
其实,不需使用递归。
过程:
1、取出指目录下的子目录列表。
2、循环对单个目录处理,找出这个目录下的所有文件(取目录下文件有个属性,是否包括子目录),比较找出最后的操作时间即可。
稍后给出完整代码。。
[/Quote]

期待中,也就您理解了我的意思!
huming_h 2009-09-24
  • 打赏
  • 举报
回复
那你直接传d:\back\host01不就行了
huming_h 2009-09-24
  • 打赏
  • 举报
回复
只需要第一级。那就不需要递归了。把目录后面的代码去掉
纸纸纸纸飞飞 2009-09-24
  • 打赏
  • 举报
回复
其实,不需使用递归。
过程:
1、取出指目录下的子目录列表。
2、循环对单个目录处理,找出这个目录下的所有文件(取目录下文件有个属性,是否包括子目录),比较找出最后的操作时间即可。
稍后给出完整代码。。
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 huanggreat 的回复:]
引用 38 楼 huming_h 的回复:
完整代码:
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 那一级!
[/Quote]

也就是host01里面所有的文件中 最后写的那个时间 。
其他的文件夹不需要列出来 、
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 huming_h 的回复:]
完整代码:
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); //递归
                }
            }
        }
[/Quote]


有点接近了,但是还是没去掉子目录!
只需要第一级 也就是 host01 那一级!
  • 打赏
  • 举报
回复
我的表述能力有这么差么 、 汗 。。。
只要得到 host01 下最新写入的文件的时间
其他都不管 。
host01 下 不管他有多少文件数 。 只取最后写入的那个文件 他的时间。
huming_h 2009-09-24
  • 打赏
  • 举报
回复
完整代码:
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); //递归
}
}
}
Annie_Cai 2009-09-24
  • 打赏
  • 举报
回复

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);
}
}
}

Annie_Cai 2009-09-24
  • 打赏
  • 举报
回复
  Program prg=new Program(); 
這個改成你自己的Class名
加载更多回复(35)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧