【问题标题】:How to grab a subdirectory name from a directory that I am tracking file size for using DirectoryInfo?如何从我正在跟踪文件大小的目录中获取子目录名称以使用 DirectoryInfo?
【发布时间】:2020-07-17 15:14:05
【问题描述】:

我为批处理创建了一个简单的类,但我无法解决这个问题。我正在使用 DirectoryInfo 标记任何超过 4KB 的文件并发送警报电子邮件。这适用于我正在监视的目录中的文件,但不适用于目录中的文件夹。如果我正在监视的目录中有一个文件夹,我会得到一个 FileInfo() 的列表,而不是子目录本身的名称。所以我要问的是,我如何实际监控子目录的大小而不是其中的文件?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Hana.BusinessLogicLayer
{
    internal class FileMonitor
    {
        public static bool Process()
        {

            var filewatch = new DirectoryInfo(@"C:\Users\me\Desktop\Test");

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

            bool foundfile = false;

            foreach (var f in filewatch.GetFiles("*", SearchOption.AllDirectories))
            {

                var theSize = f.Length / 1000;
                
                
                if (theSize > 4) && f.LastWriteTime > DateTime.Now.AddMinutes(-15))
                {
                    Console.WriteLine("NEW LARGE FILE WRITTEN: {0} is {1}KB.", f.Name, theSize);
                    largeFiles.Add(f.Name);
                    foundfile = true;
                }

                else
                {
                    Console.WriteLine("SMALL FILE: {0} is small and does not matter", f.Name);
                }

                

                if (foundfile)
                {
                    var sendMail = Utility.SMTPUtil.SendMailCustom(initiatingUserId: 1,
                                                toAddresses: new List<string> { "email@email.com" },
                                                subject: "File Manager Test",
                                                bcc: new List<string> { "email@email.com" },
                                                body: f.Name + " is " + theSize + "KB and the last 
                                                write time was " + f.LastWriteTime
                                                );
                    Console.WriteLine("Email about large file sent");
                    Console.WriteLine(DateTime.Now.ToLocalTime());
                    if (!sendMail.Success)
                    {
                        return false;
                    }

                }

            }

            Console.WriteLine("Press any key to continue . . .");
            Console.ReadLine();
            return true;
        }

    }
}

【问题讨论】:

    标签: c# .net directoryinfo


    【解决方案1】:

    DirectoryInfo 类没有任何文件夹大小的概念。我认为你最好的选择是遍历每个子目录(可能是递归的)并添加其中文件的大小。

    【讨论】:

    • 有没有办法至少定义文件来自的文件夹的名称?
    • 如果您只关心任何单个目录的大小(而不仅仅是整个顶级目录),您可以按每个 FileInfo 对象的 Directory 属性进行分组。如果您只关心顶级目录,您可能希望停止在 GetFiles 调用中使用 AllDirectories 搜索选项,而是使用 GetDirectories 方法遍历目录。在这种情况下,最好对 GetDirectories 中的目录进行循环,在每个目录上调用带有 AllDirectories 的 GetFiles 并累加文件大小。
    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多