Я пытаюсь сделать приложение, которое будет делать резервные копии папок перед переустановкой системы.
Что у меня есть сейчас, вы можете видеть выше. После нажатия кнопки 2 у меня появилось сообщение «Не удалось найти каталог« C:\Projects\WindowsFormsApplication2\WindowsFormsApplication2\bin\Debug.Desktop ».
Кажется, я не могу правильно указать полный путь к каталогу.
public void button1_Click(object sender, EventArgs e)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(patg);
System.IO.FileSystemInfo[] files = di.GetDirectories();
checkedListBox1.Items.AddRange(files);
}
private void button2_Click(object sender, EventArgs e)
{
foreach (object itemChecked in checkedListBox1.CheckedItems)
{
string P = Path.GetFullPath(itemChecked.ToString());
DirectoryInfo di = new DirectoryInfo(P);
FileSystem.CopyDirectory(P, @"P:\");
}
}
Я ожидаю, что пользователь может установить флажки из списка, а затем нажать кнопку «Копировать» (кнопка 2), которая скопирует папку в другое место. Я был бы очень признателен за вашу помощь!
@HaraldCoppoolse прав. Установите точку останова на строке, которая начинается с string P =
… Проверяйте свои значения, перешагивайте по одной строке за раз. Дайте нам знать, что вы видите.
Папка UserProfile содержит множество различных типов каталогов. Некоторые из них вообще не являются каталогами. Некоторые из них являются точками повторной обработки. В конечном итоге вы получите исключения AccessDenied. Или путь назначения будет содержать список папок странный. Вы должны управлять (более чем вероятными) исключениями, которые вы можете вызвать в этой процедуре. Кроме того, проверьте тип каталога, который вы собираетесь скопировать, и двигайтесь дальше, если это то, что вам не следует трогать (или вы не знаете, как с этим справиться).
@HaraldCoppoolse Значение P равно «C:\Projects[...]\bin\Debug.Desktop'».
@HaraldCoppoolse Также я заметил, что когда исполняемый файл программы находится внутри %username%, он работает нормально, как я и хотел.
@tgolisch Я также буду отмечать вас здесь для получения новой информации
Хорошо, я нашел разрешение. Это была неправильная строка, выбранная из itemChecked. Правый это:
string P = itemChecked.FullName.ToString();
Каково значение P, когда вы получаете исключение? Существует ли этот каталог? Когда вы получаете это исключение: во время new DirectoryInfo или во время CopyDirectory?