0

特定のサイズを超えるファイルについて特定のディレクトリをスキャンするアプリケーションがあります。それを検出すると、特定のファイルが特定のサイズ制限に達したことを示す警告メールを送信します。私の問題は、現在のプログラムがファイルごとに1通の電子メールを送信することです。つまり、制限を超えているファイルが10個ある場合、10個の電子メールが送信されます。すべてのファイルをコンパイルし、それらのファイルのリストを1つの電子メールで送信する方法は?必要に応じて次のコードを使用します。

private void Form1_Load(object sender, EventArgs e)
    {
        count = 0;
        timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += new EventHandler(timer1_Tick);
        timer.Start();


        List<string> s1 = System.IO.Directory.GetFiles(@"F:\gdimaging\data", "*.*", SearchOption.AllDirectories).ToList<string>();
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\hios\DATA", "*.*", SearchOption.AllDirectories).ToList<string>());
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\imgviewer\data", "*.*", SearchOption.AllDirectories).ToList<string>());
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\newcnas\data", "*.*", SearchOption.AllDirectories).ToList<string>());
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\newpod\data", "*.*", SearchOption.AllDirectories).ToList<string>());
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\OMS\data", "*.*", SearchOption.AllDirectories).ToList<string>());
        s1.AddRange(System.IO.Directory.GetFiles(@"F:\WEBIMG", "*.*", SearchOption.AllDirectories).ToList<string>());


        dt.Columns.Add("File_Name");
        dt.Columns.Add("File_Type");
        dt.Columns.Add("File_Size");
        dt.Columns.Add("Create_Date");
        ArrayList fileList = new ArrayList();      
        foreach(string s in s1)
        {   
            try
            {   
                FileInfo info = new FileInfo(s);
                FileSystemInfo sysInfo = new FileInfo(s);
                dr = dt.NewRow();
                //System.Collections.Generic.List<string> nameList;
                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)
                {
                    fileList.Add(sysInfo.Name);
                }

                if (dt.Rows.Count > 0)
                {
                    dataGridView1.DataSource = dt;
                }
            }
            catch (UnauthorizedAccessException ex)
            {
                MessageBox.Show("Error : " + ex.Message);
                continue;
            }

        }

        MessageBox.Show(fileList + "overlimit!!");

}

4

2 に答える 2

1

foreachループでファイルサイズを確認した後、特定の制限を超えるこれらのファイルを別の配列に追加し、forループの外にあるメッセージ本文の配列要素を結合します。

于 2012-04-16T03:52:36.647 に答える
1

ファイルの1つが基準を満たしている場合はブール値を返し、基準を満たしている場合にのみメール操作を実行するパブリックメソッド/属性を使用して、メールオプションをクラスにカプセル化します。

このようなもの-テキストエディタのMacで行われたようにチェックされていません

private void Form1_Load(object sender, EventArgs e)
{
    count = 0;
    timer = new Timer();
    timer.Interval = 1000;
    timer.Tick += new EventHandler(timer1_Tick);
    timer.Start();


    List<string> s1 = System.IO.Directory.GetFiles(@"F:\gdimaging\data", "*.*", SearchOption.AllDirectories).ToList<string>();
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\hios\DATA", "*.*", SearchOption.AllDirectories).ToList<string>());
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\imgviewer\data", "*.*", SearchOption.AllDirectories).ToList<string>());
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\newcnas\data", "*.*", SearchOption.AllDirectories).ToList<string>());
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\newpod\data", "*.*", SearchOption.AllDirectories).ToList<string>());
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\OMS\data", "*.*", SearchOption.AllDirectories).ToList<string>());
    s1.AddRange(System.IO.Directory.GetFiles(@"F:\WEBIMG", "*.*", SearchOption.AllDirectories).ToList<string>());

    //s1 = Directory.GetFiles(@"F:\gdimaging\data", "*.*");
    dt.Columns.Add("File_Name");
    dt.Columns.Add("File_Type");
    dt.Columns.Add("File_Size");
    dt.Columns.Add("Create_Date");
    // new mail list class
    class mailList {
    public bool isEmpty = true;
    MailMessage mailMessage;
    // do all the onceonly stuff in the constructor
        public mailList(){
            mailMessage = new MailMessage();
            mailMessage.To.Add(new MailAddress("shahrul1509@yahoo.com"));
            mailMessage.To.Add(new MailAddress("shahrul_kakashi90@hotmail.com"));
    // set subject
            mailMessage.Subject = "FILE SIZE WARNING MESSAGE";
            // Identify the credentials to login to the gmail account  
            string sendEmailsFrom = "shahrul1509@gmail.com";
                    // password below is written in * to encrypt it

            string sendEmailsFromPassword = "***4556**";
            NetworkCredential cred = new NetworkCredential(sendEmailsFrom, sendEmailsFromPassword);
            SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
            mailClient.EnableSsl = true;
            mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
            mailClient.UseDefaultCredentials = false;
            mailClient.Timeout = 20000;
            mailClient.Credentials = cred;
            mailMessage.IsBodyHtml = true;
            mailMessage.From = new MailAddress("shahrul1509@gmail.com", "Shahrul Nizam");

        }
        public addFile(String fileName){
            mailMessage.Body = mailMessage.Body + sysInfo.Name+ "HAS REACH ITS SIZE LIMIT.";
            isEmpty = false;
        }
        public send(){
            mailClient.Send(mailMessage);
            MessageBox.Show("Email Notification Sent!");
        }
    }

    }
    try
        {
        mailList ml = new mailList();
        foreach(string s in s1)
            {
                FileInfo info = new FileInfo(s);
                FileSystemInfo sysInfo = new FileInfo(s);
                dr = dt.NewRow();
            //System.Collections.Generic.List<string> nameList;
                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)
                {
                    ml.addFile(sysInfo.Name);

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

                }
                if(ml.isEmpty==false){
                    ml.Send();
                }
            }
    catch (UnauthorizedAccessException ex)
    {
        MessageBox.Show("Error : " + ex.Message);
        continue;
    }

}
于 2012-04-16T04:41:14.137 に答える