验证/读取文件夹中文件的总数,每个文件的大小以及本地文件夹上任何扩展名的文件的一些文本

时间:2015-04-17 15:23:36

标签: c# .net file-io

我没有。在本地文件夹中具有多个扩展名的文件。我必须读取文件夹中文件总数的计数,再次检查大小后我必须检查每个文件的大小..如果我们得到任何文件大小< 0字节。我必须将其报告为已损坏或无法打开该文件...因此我们可以通过打开文件夹中的每个文件来检查该文件...

我尝试过以下代码来获取计数,但只有一种扩展类型。那么如何从包含所有扩展名的文件夹中获取文件数以及如何检查文件大小。我如何检查是否已损坏。如果我可以打开它就足够了。

public static int GetFileCount(string path, string searchPattern, SearchOption searchOption)
{
    var fileCount = 0;
    var fileIter = Directory.EnumerateFiles(path, searchPattern, searchOption);
    foreach (var file in fileIter)
        fileCount++;

    return fileCount;
}

以上称为

GetFileCount(@"D:\Attachment", "*.png", SearchOption.AllDirectories);

3 个答案:

答案 0 :(得分:0)

首先,计算给定文件夹中的文件然后遍历每个文件。

DirectoryInfo di = new DirectoryInfo("");

foreach (FileInfo fi in di.GetFiles())
{
    if(fi.Length ==0)
    {
        //must be corrupt
    }
}

答案 1 :(得分:0)

您可以执行与以下类似的操作。我意识到拥有文件名,扩展名和长度的容器类有点多余,因为FileInfo对象已经包含这些信息,但是有一个容器允许选择具有其他自定义字段和属性。

以下内容应编译:

class Program
{
    static void Main(string[] args)
    {
        var details = GetFileDetails(@"c:\", "*.*", SearchOption.AllDirectories);
        //var details = GetFileDetails(@"c:\", "*.png", SearchOption.AllDirectories);

        var filesOfZeroSize = details.Where(detail => detail.Length <= 0).ToList();
        var filesOfZeroSizeCount = filesOfZeroSize.Count;

        if (filesOfZeroSizeCount > 0)
        {
            Console.WriteLine("There are {0} files with a length of 0.", filesOfZeroSizeCount);
        }
    }

    public static List<FileDetail> GetFileDetails(string path, string searchPattern, SearchOption options)
    {
        var directory = new DirectoryInfo(path);

        if (!directory.Exists)
        {
            throw new DirectoryNotFoundException("Path");
        }

        List<FileDetail> fileDetails = new List<FileDetail>();
        FileInfo[] files = directory.GetFiles(searchPattern, options);
        foreach (FileInfo fileInfo in files)
        {
            fileDetails.Add(new FileDetail(fileInfo.Name, fileInfo.Extension, fileInfo.Length));
        }

        return fileDetails;
    }
}

class FileDetail
{
    public string FileName { get; set; }

    public string Extension { get; set; }

    public long Length { get; set; }

    public FileDetail()
        : this(null, null, -1)
    {
    }

    public FileDetail(string fileName, string extension, long length)
    {
        this.FileName = fileName;
        this.Extension = extension;
        this.Length = length;
    }
}

请注意,使用上述解决方案时,您可能会遇到访问被拒绝的异常。在这种情况下,请考虑查看以下帖子的已接受答案并修改GetFileDetails方法以适应此目的。

Access to the path is denied when using Directory.GetFiles(…)

答案 2 :(得分:0)

尝试使用此方法,只需传递路径的目录,您就可以在控制台中看到带扩展名的文件名及其大小用逗号分隔。

   public static void filesInfoInDir(string dirPath)
    {

        try
        {

            foreach (string f in Directory.GetFiles(dirPath))
            {

                FileInfo file = new FileInfo(Path.Combine(dirPath,f));
                long s1 = file.Length;
      //This will write the file names along with their size separated with a comma
                Console.WriteLine(f + "," + s1);


            }

        }
        catch (System.Exception excpt)
        {
            Console.WriteLine(excpt.Message);
        }


    }