File.Copy, необработанное исключение типа 'System.IO.IOException' произошло в mscorlib.dll - PullRequest
0 голосов
/ 04 марта 2019

Я делаю программу с 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.

Я не уверен, что является причиной этой ошибки.Если я удаляю содержимое в тестовой папке, а затем запускаю программу, ошибка не возникнет.

Любая помощь будет принята с благодарностью.:)

1 Ответ

0 голосов
/ 04 марта 2019

Третий аргумент для File.Copy() должен быть true, чтобы он мог перезаписать файл, если он уже существует.

File.Copy(newPath, newPath.Replace(GamesDirectory, TestDirectory), true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...