如何仅显示可访问文件并跳过不可访问文件? [英] How to display accessible files only and skip inaccessible file?

查看:59
本文介绍了如何仅显示可访问文件并跳过不可访问文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序,该应用程序基于当前程序集目录在datagridview中显示文件列表.我想知道的是,如何使应用程序仅显示可访问的文件,并将跳过那些不可访问的文件.如果需要,这是我的代码:

I have an application that displays a list of files in a datagridview based on the current assembly directory. What I want to know is that how to make the application display only the accessible file only and will skip those which is inaccessible. Here is my code if needed:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Reflection;
using System.Security.Permissions;


namespace MonitorDirectory
{
    public partial class Form1 : Form
    {   private Timer timer;
        private int count;
        DataTable dt = new DataTable();
        DataRow dr;
        String[] s1;
        public Form1()
        {
            InitializeComponent();
        }

 
        private void Form1_Load(object sender, EventArgs e)
        {

            count = 0;
            timer = new Timer();
            timer.Interval = 1000;
            timer.Tick += new EventHandler(timer1_Tick);
            timer.Start();
            
                    
            s1 = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "*.*", SearchOption.AllDirectories);
            for (int i = 0; i <= s1.Length - 1; i++)
            {
                if (i == 0)
                   {
                       dt.Columns.Add("File_Name");
                       dt.Columns.Add("File_Type");
                       dt.Columns.Add("File_Size");
                       dt.Columns.Add("Create_Date");
                   }

                try
                {
                   FileInfo info = new FileInfo(s1[i]);
                   FileSystemInfo sysInfo = new FileInfo(s1[i]);
                   dr = dt.NewRow();

                   dr["File_Name"] = sysInfo.Name;
                   dr["File_Type"] = sysInfo.Extension;
                   dr["File_Size"] = (info.Length / 1024).ToString();
                   dr["Create_Date"] = sysInfo.CreationTime.Date.ToString("dd/MM/yyyy");
                   dt.Rows.Add(dr);


                   if ((info.Length / 1024) > 1500000)
                   {
                      MessageBox.Show("" + sysInfo.Name + " had reach its size limit.");
                   }
                }

                catch (Exception ex)
                {
                  MessageBox.Show("Error : " + ex.Message);
                  continue;
                }
            }

            if (dt.Rows.Count > 0)
            {
               dataGridView1.DataSource = dt;
            }
       }


        private void timer1_Tick(object sender, EventArgs e)
        {
                count++;
                if (count == 60)
                {
                    count = 0;
                    timer.Stop();
                    Application.Restart();
                }
        }

        public string secondsToTime(int seconds)
        {
             int minutes = 0;
             int hours = 0;

             while (seconds >= 60)
             {
                minutes += 1;
                seconds -= 60;
             }
             while (minutes >= 60)
             {
                hours += 1;
                minutes -= 60;
             }

             string strHours = hours.ToString();
             string strMinutes = minutes.ToString();
             string strSeconds = seconds.ToString();

             if (strHours.Length < 2)
                 strHours = "0" + strHours;
             if (strMinutes.Length < 2)
                 strMinutes = "0" + strMinutes;
             if (strSeconds.Length < 2)
                 strSeconds = "0" + strSeconds;
             return strHours + ":" + strMinutes + ":" + strSeconds;
         }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            BindingSource bind = new BindingSource();
            bind.DataSource = dt;
            bind.Filter = string.Format("File_Name like '%{0}%'", textBox1.Text.Trim());
        }
         
   }
}

推荐答案

请在我对该问题的评论中看到我的问题.如果这是您理解不可访问"的方式,则可以使用try-catch块,在循环中捕获指示无法访问的文件系统对象(但仅限那些)的异常,并在catch块中忽略该异常,阻止其传播.您可以指示引起可访问性问题的文件系统对象,如果需要,可以记录它的文件名或异常信息.只需在处理完异常后传播该异常,就不要重新抛出该异常.

—SA
Please see my question in my comment to the question. If this is how you understand "not accessible", you can use the try-catch block, catch the exceptions indicating inaccessible file system objects (but only those) in the loop and, in the catch block, ignore the exception, block its propagation. You can indicate the file system object which caused accessibility problem, log it''s file name or exception information, if you want. Simply do not propagate the exception after handling it, do not re-throw it.

—SA


这篇关于如何仅显示可访问文件并跳过不可访问文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆