private static bool UnzipPackage(UpdateStatusExecutor executor, Filing f, string zipPath, out string[] zipFiles) { zipFiles = new string[0]; string errorMsg; if (!ZipUtilities.TryUnzipAndUncompressFiles(f.InstancePath, zipPath, out zipFiles, out errorMsg)) { executor.Invoke("Error: The ZIP file cannot be opened."); executor.Invoke("\tSkipping filing: " + f.InstancePath); return(false); } return(true); }
private static bool UnzipPackage(Filing f, string zipPath, out string[] zipFiles) { zipFiles = new string[0]; string errorMsg; if (!ZipUtilities.TryUnzipAndUncompressFiles(f.InstancePath, zipPath, out zipFiles, out errorMsg)) { Console.WriteLine("Error: The ZIP file cannot be opened."); Console.WriteLine("\tSkipping filing: " + f.InstancePath); return(false); } return(true); }
private bool UnzipMove(DirectoryInfo directory, out string[] files, out string error) { //Directory passed should be \Reports bool retval = true; FileInfo[] zipped = directory.GetFiles("*.zip"); files = null; error = string.Empty; string fileName = string.Empty; try { foreach (FileInfo zip in zipped) { fileName = zip.Name; fileName = fileName.Remove(fileName.Length - 4); ZipUtilities.TryUnzipAndUncompressFiles(zip.FullName, zip.Directory.Parent.FullName + "\\Comparison\\" + fileName, out files, out error); } } catch (System.Security.SecurityException ex) { error = "Failed proccess report with the following exception: " + ex.Message; RLogger.Error(error, ex); retval = false; } catch (UnauthorizedAccessException ex) { error = "Failed proccess report with the following exception: " + ex.Message; RLogger.Error(error, ex); retval = false; } catch (PathTooLongException ex) { error = "Failed proccess report with the following exception: " + ex.Message; RLogger.Error(error, ex); retval = false; } catch (Exception ex) { error = "Failed proccess report with the following exception: " + ex.Message; RLogger.Error(error, ex); retval = false; } return(retval); }
public bool TryMoveFilingsToProcessingFolder(out List <FilingInfo> filings) { filings = new List <FilingInfo>(); FileInfo[] zipFiles = FilingProcessorManager.TheMgr.FilingsFolderInfo.GetFiles("*.zip", SearchOption.TopDirectoryOnly); Array.Sort(zipFiles, (left, right) => DateTime.Compare(left.CreationTime, right.CreationTime)); Guid batchId = Guid.NewGuid(); DirectoryInfo processingBatchFolder = FilingProcessorManager.TheMgr.ProcessingFolderInfo.CreateSubdirectory(batchId.ToString()); foreach (FileInfo zipFile in zipFiles) { string filingName = Path.GetFileNameWithoutExtension(zipFile.Name); if (string.IsNullOrEmpty(filingName)) { try { string errorFile = Path.Combine(FilingProcessorManager.TheMgr.ReportsFolderInfo.FullName, "UNKNOWN.txt"); string errorMessage = "Cannot process a filing zip which has no base name."; FilingProcessorManager.TheMgr.WriteLogEntry(errorMessage, EventLogEntryType.Error); File.WriteAllText(errorFile, errorMessage); zipFile.Delete(); } catch { } continue; } DirectoryInfo filingProcessingFolder = processingBatchFolder.CreateSubdirectory(filingName); string[] unzippedFiles; string filingZipFile = string.Format("{0}{1}{2}", filingProcessingFolder.FullName, Path.DirectorySeparatorChar, Path.GetFileName(zipFile.Name)); if (filingRetryCount.ContainsKey(filingName) && filingRetryCount[filingName] >= maxUnzipAttempts) { filingRetryCount.Remove(filingName); //We have failed to extract the filing multiple times, stop trying to make it work, //remove the zip file from the filing folder, log an error in the reports folder, //and reomve the entry from the dictionary string errorFilename = filingName + "_" + ERROR_FILE_NAME; string errorFile = Path.Combine(FilingProcessorManager.TheMgr.ReportsFolderInfo.FullName, filingName); string errorMsg = string.Format("Cannot extract files for filing {0}. The max number of retries has been reached, removing the zip file from the Filings folder. ", Path.GetFileNameWithoutExtension(zipFile.FullName)); if (File.Exists(errorFile)) { FileUtilities.DeleteFile(new FileInfo(errorFile), true); } FilingProcessorManager.TheMgr.WriteLogEntry(errorMsg, EventLogEntryType.Error); File.WriteAllText(errorFile, errorMsg); zipFile.CopyTo(filingZipFile); FileUtilities.DeleteFile(zipFile, true); } else { string zipError; if (ZipUtilities.TryUnzipAndUncompressFiles(zipFile.FullName, filingProcessingFolder.FullName, out unzippedFiles, out zipError)) { FilingInfo filing = new FilingInfo(); filing.AccessionNumber = filingProcessingFolder.Name; filing.ParentFolder = processingBatchFolder.FullName; filings.Add(filing); zipFile.CopyTo(filingZipFile, true); FileUtilities.DeleteFile(zipFile, true); //SEC0145 - Only queue one filing at a time break; } else { //Delete the folder from the processing batch folder sense it doesn't contain a valid filing FileUtilities.DeleteDirectory(filingProcessingFolder, true, true); if (!filingRetryCount.ContainsKey(filingName)) { filingRetryCount.Add(filingName, 0); } filingRetryCount[filingName]++; FilingProcessorManager.TheMgr.WriteLogEntry(string.Format("Can not extract files for filing {0}. The zip file may not be complete. ", Path.GetFileNameWithoutExtension(zipFile.FullName)), EventLogEntryType.Warning); } } } if (processingBatchFolder.GetDirectories().Length == 0) { //There were not any valid filings in this batch, remove the batch folder FileUtilities.DeleteDirectory(processingBatchFolder, true, true); } return(true); }