Я делаю программу с Windows Forms на C #, которая находится в фоновом режиме и должна отслеживать изменения в каталоге и автоматически копировать эти изменения в целевой каталог.Программа также проверит любые изменения между двумя каталогами при запуске и скопирует их.В идеале целевой каталог должен быть точной копией базового каталога во время работы этой программы.
Вот мой код.
private const string GamesDirectory = "D:\\Games";
private const string TestDirectory = "D:\\Test";
#region Fields
private readonly Process _launcher;
#endregion
#region Constructors
/// <summary>
/// Initialises an instance of the <see cref="GameReviewManager" /> class.
/// </summary>
public GameReviewManager()
{
InitializeComponent();
_launcher = new Process();
_launcher.StartInfo.FileName = "GameReviewLauncher";
_launcher.EnableRaisingEvents = true;
_launcher.Exited += LauncherExited;
_launcher.Start();
MonitorDirectory(TestDirectory);
}
#endregion
#region Private Methods
/// <summary>
/// Handles the launcher exited event.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The event.</param>
private void LauncherExited(object sender, EventArgs e)
{
_launcher.Start();
}
private static void MonitorDirectory(string path)
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
fileSystemWatcher.Path = path;
fileSystemWatcher.Created += FileSystemWatcherCreated;
fileSystemWatcher.Renamed += FileSystemWatcherRenamed;
fileSystemWatcher.Deleted += FileSystemWatcherDeleted;
fileSystemWatcher.EnableRaisingEvents = true;
//Now Create all of the directories
foreach (string dirPath in Directory.GetDirectories(GamesDirectory, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(dirPath.Replace(GamesDirectory, TestDirectory));
}
//Copy all the files & Replaces any files with the same name
foreach (string newPath in Directory.GetFiles(GamesDirectory, "*", SearchOption.AllDirectories))
{
File.Copy(newPath, newPath.Replace(GamesDirectory, TestDirectory), false);
}
}
private static void FileSystemWatcherCreated(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
}
private static void FileSystemWatcherRenamed(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File renamed: {0}", e.Name);
}
private static void FileSystemWatcherDeleted(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File deleted: {0}", e.Name);
}
#endregion
}
Когда я запускаю свою программу, я получаю эту ошибку, AnПроизошло необработанное исключение типа «System.IO.IOException» в mscorlib.dll
. Выдает эту ошибку в первом файле, который пытается изменить во втором цикле foreach в методе MonitorDirectory.
Я не уверен, что является причиной этой ошибки.Если я удаляю содержимое в тестовой папке, а затем запускаю программу, ошибка не возникнет.
Любая помощь будет принята с благодарностью.:)