static void Main() { #region Check for Existing Running Instances const string appName = "Archival Tool"; bool createdNew; var mutex = new Mutex(true, appName, out createdNew); if (!createdNew) { return; } #endregion // Configure logging XmlConfigurator.Configure(); // Configure application settings Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Configure archival metadata ArchiveMetadata.Initialize(); // Begin running core form app using (new TrayIcon()) { Application.Run(); } }
public SortWorker(ConcurrentQueue <FileInfo> queue) : base() { DoWork += async delegate { while (!queue.IsEmpty) { try { if (queue.TryDequeue(out var file)) { if (file.IsReadOnly) { file.Attributes = FileAttributes.Normal; } var folder = ArchiveMetadata.GetArchiveDirectory(file); for (int i = 0; i < Settings.Default.FileMoveAttempts; i++) { try { string newFullName = $"{folder.FullName}{Path.DirectorySeparatorChar}{Path.GetFileNameWithoutExtension(ArchiveMetadata.RemoveAddendums(file.Name))}"; if (File.Exists($"{newFullName}{file.Extension}")) { int iterator = 0; while (File.Exists($"{newFullName} ({iterator}){file.Extension}")) { iterator++; } newFullName = $"{newFullName} ({iterator})"; } file.MoveTo($"{newFullName}{file.Extension}"); } catch (IOException) { await Task.Delay(Settings.Default.ThreadWaitTime); continue; } break; } log.Info($"Sorted File: {file.FullName}"); } else { await Task.Delay(Settings.Default.ThreadWaitTime); } } catch (IOException ex) { log.Info("IOException moving file", ex); } catch (Exception ex) { log.Error("Exception moving file", ex); } } }; }