.NET 4.x Глюки System.IO методы Move и MoveTo - C#
Формулировка задачи:
Здравствуйте, а началось все с того, что метод FileInfo.Moveto в 15 процентах случаях не переносил файлы а копировал их. Узнал я это потому что у меня стоит ловушка, запрещающая переносить если такой файл уже существует.
Разбирая свою программу, я грешил на что угодно и расчленил ее до нельзя, оставив только самые простые и базовые функции. В какой-то момент она стала периодически выдавать ошибку что невозможно выполнить MoveTo так как файл занят другим процессом. И подошел наконец к этому:
Нажимаю на кнопку первый раз он легко переносит файл. Нажимаю кнопку второй раз он снова выбрасывает исключение. Хотя файл существует, не защищен, и свободно перемещается виндой. Я нажимаю еще несколько раз и Чудо, файл перенесся, методом GetNextForCircle() перехожу к следующему, нажимаю кнопку, и снова такая же беда, с четертой, пятой попытке файл снова перенесся и так все время.
Я даже думал, что в первый запуск что-то не то, или с путями, но это исключение иногда срабатывала и на третий раз, а пути отладкой я проверил, все в порядке.
Товарищи помогите, и давайте разберемся с этим System.IO, я проверю каждую вашу догадку, неужели в C# нельзя толком работать с файлами, я уже тут постил с методом Replace.
На всякий случай я прикрепил картинку с MessageBox
private void button9_Click(object sender, EventArgs e) { lastPositionF1 = "E:/Gh"; string filePathNN = massive2[stringMatchNumber].ToString(); string fu = lastPositionF1 + "/" + System.IO.Path.GetFileName(filePathNN); label6.Text = stringMatchNumber.ToString(); try { //filePathTargetF4Class.Delete();//к сожалению метод replace не работает //filePathSourceF4Class.MoveTo(lastPositionF4 + "\\" + filePathSourceF4Class.Name);//получаем позицию куда перенести и склеиваем с именем файла File.Move(filePathNN, fu); // filSource.MoveTo(lastPositionNN + "\\" + System.IO.Path.GetFileName(filePathNN));//извелкаем название файла из пути //filSource.MoveTo(lastPositionNN + "\\" + System.IO.Path.GetFileName(filePathNN)); } catch (Exception r)// System.IO.PathTooLongException) { MessageBox.Show(r.ToString() + " ---" + "filePathNN="+filePathNN+ "----", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } GetNextForCircle(); // RefreshMain(); //MainRegimeOfRandom(); // InfoOurElementAfterRefresh(); // fileRemoveToolStripMenuItem_Click(sender, e); }
Решение задачи: «.NET 4.x Глюки System.IO методы Move и MoveTo»
textual
Листинг программы
string fileTarget = "E:\\Target" + System.IO.Path.GetFileName(file);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д