簡體   English   中英

驗證/讀取文件夾中文件的總數,每個單個文件的大小以及本地文件夾中具有任何擴展名的文件的某些文本

[英]Validate/read total count of file in folder, size of every single file and some text of file with any extension on local folder

我沒有。 在本地文件夾中具有許多擴展名的文件。 我必須從文件夾中讀取文件總數的計數,再次驗證大小后,我必須檢查每個文件的大小。..如果文件大小小於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);

因此,首先計算給定文件夾中的文件,然后循環遍歷每個文件。

DirectoryInfo di = new DirectoryInfo("");

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

您可以執行類似以下操作。 我意識到,擁有一個用於文件名,擴展名和長度的容器類有點多余,因為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方法以適應此情況。

使用Directory.GetFiles(…)時,拒絕訪問路徑

嘗試使用此方法,只需傳遞路徑目錄,即可在控制台中看到帶有擴展名的文件名及其大小,以逗號分隔。

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


    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM