簡體   English   中英

獲取C#中所有大於1gb的文件

[英]Obtain all files that are over 1gb in C#

我正在嘗試獲取計算機上的所有非系統文件,以通過WinForms 應用程序找出哪些文件超過 1gb。

這是我正在使用的代碼:

        const long b500mb = 65536000;
        const long b1gb = 134217728;
        public Main()
        {
            InitializeComponent();
        }
        //https://unitconverter.io/gigabits/bytes/1
        private void Main_Load(object sender, EventArgs e)
        {
            var cDriveDirectories = new DirectoryInfo(@"C:\").GetDirectories()
                .Where(f => !f.Attributes.HasFlag(FileAttributes.System))
                .Where(w => w.FullName != @"C:\Windows")
                .Select(f => f.FullName)
                .ToList();

            var filesOver1Gb = new List<FileInfo>();

            foreach (var item in cDriveDirectories)
            {
                DirectoryInfo d = new DirectoryInfo(item);

                var files = d.GetFiles("*", SearchOption.AllDirectories).Where(w => w.Attributes.HasFlag(FileAttributes.Normal)
                                                                                 && w.Length > b1gb).ToList();

                foreach (FileInfo file in files)
                {
                    filesOver1Gb.Add(file);
                }
            }
        }

我怎樣才能解決這個錯誤?

System.UnauthorizedAccessException:“拒絕訪問路徑‘C:\.netpub\history’。”

在@zee 的幫助下:

我以管理員身份進行 VS,然后在失敗並繼續的代碼行周圍放置一個 try/catch。

這段代碼將獲取我需要的信息!

        const long b500mb = 65536000;
        const long b1gb = 134217728;
        public Main()
        {
            InitializeComponent();
        }
        //https://unitconverter.io/gigabits/bytes/1
        private void Main_Load(object sender, EventArgs e)
        {
            var cDriveDirectories = new DirectoryInfo(@"C:\").GetDirectories()
                .Where(f => !f.Attributes.HasFlag(FileAttributes.System))
                .Where(w => w.FullName != @"C:\Windows")
                .Select(f => f.FullName)
                .ToList();

            var filesOver1Gb = new List<FileInfo>();
            IList<string> unauthorizedFiles = new List<string>();

            foreach (var item in cDriveDirectories)
            {
                DirectoryInfo d = new DirectoryInfo(item);

                var files  = new List<FileInfo>();
                try
                {
                    files = d.GetFiles("*", SearchOption.AllDirectories).Where(w => !w.Attributes.HasFlag(FileAttributes.System)
                                                                                     && w.Length > b1gb).ToList();
                }
                catch (UnauthorizedAccessException)
                {
                    // ignore error and continue to process files over 1gb.
                }


                foreach (FileInfo file in files)
                {
                    filesOver1Gb.Add(file);
                }
            }

            // get the total count in bytes to find out how many gbs we have etc.
            long totalOver1Gb = 0;
            foreach (var file in filesOver1Gb)
            {
                totalOver1Gb = totalOver1Gb + file.Length;
            }
        }

暫無
暫無

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

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