示例#1
0
 public static void TryUpdateReceivedDirectoryPoll(BackgroundWorker bWorker)
 {
     try
     {
         bWorker.ReportProgress(5, "Starting");
         ReceivedDirectoryPoll.UpdateReceivedDirectoryPoll();
         bWorker.ReportProgress(5, "Directory Poll Updated");
     }
     catch (Exception ex)
     {
         bWorker.ReportProgress(5, "Error");
     }
 }
示例#2
0
        public static void TryMonitorArchiveFolder(BackgroundWorker bWorker)
        {
            try
            {
                bWorker.ReportProgress(2, "Starting");
                var range   = ReceivedDirectoryPoll.GetPendingDateRange();
                var rcvdDir = new XmlDocument();
                using (var session = new Session())
                {
                    // Connect
                    bWorker.ReportProgress(2, "Connecting...");
                    session.Open(SessionOptions);
                    bWorker.ReportProgress(2, "Connected");

                    //  FTP Directory.
                    var directory = session.ListDirectory(Settings.Default.iExchangeWebArchiveFolder);
                    bWorker.ReportProgress(2, "Dir. Received");

                    //  XML
                    var root    = rcvdDir.CreateElement("Root");
                    var localDT = rcvdDir.CreateAttribute("LocalDT");
                    localDT.Value = DateTime.Now.ToString();
                    root.Attributes.Append(localDT);
                    rcvdDir.AppendChild(root);

                    var rangeElement = rcvdDir.CreateElement("Range");
                    var fromDT       = rcvdDir.CreateAttribute("FromDT");
                    fromDT.Value = range[0].ToString();
                    var toDT = rcvdDir.CreateAttribute("ToDT");
                    toDT.Value = range[1].ToString();
                    rangeElement.Attributes.Append(fromDT);
                    rangeElement.Attributes.Append(toDT);
                    root.AppendChild(rangeElement);

                    foreach (
                        var fileInfo in
                        directory.Files.Where(
                            fi => !fi.IsDirectory && fi.LastWriteTime > range[0] && fi.LastWriteTime <= range[1]))
                    {
                        var file     = rcvdDir.CreateElement("File");
                        var fileName = rcvdDir.CreateAttribute("FileName");
                        fileName.Value = fileInfo.Name;
                        file.Attributes.Append(fileName);

                        var sourceFileDT = rcvdDir.CreateAttribute("SourceFileDT");
                        sourceFileDT.Value = fileInfo.LastWriteTime.ToString();
                        file.Attributes.Append(sourceFileDT);

                        var sourceFileLen = rcvdDir.CreateAttribute("SourceFileLen");
                        sourceFileLen.Value = fileInfo.Length.ToString();
                        file.Attributes.Append(sourceFileLen);

                        var sourceCRC32 = rcvdDir.CreateAttribute("SourceCRC32");

                        try
                        {
                            sourceCRC32.Value =
                                BitConverter.ToString(session.CalculateFileChecksum("crc32", fileInfo.FullName))
                                .Replace("-", "")
                                .ToUpper();
                        }
                        catch (Exception ex)
                        {
                            sourceCRC32.Value = ex.Message.Split('-')[1].Trim().ToUpper();
                        }
                        bWorker.ReportProgress(2, "Checksum Retrieved");
                        file.Attributes.Append(sourceCRC32);

                        root.AppendChild(file);
                    }
                }
                bWorker.ReportProgress(2, "Updating Logs");
                ReceivedDirectoryPoll.RecordReceiveFileLog(rcvdDir.InnerXml);
                bWorker.ReportProgress(2, "Logs Updated");
            }
            catch (Exception ex)
            {
                bWorker.ReportProgress(2, "Error");
            }
        }