FolderBrowserDialog + string
Через FDB человек выбирает расположение папки где лежит сама игра. Программа должна сложить путь корневой папки с моими прописанными путями
private void button1_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
string url = "https://paragonproject.ru/dlc_files/clothes/clothes_1/dlc.rpf";
string dlcGTAV_folder = @"C:\Users\Администратор\Desktop\dlc.rpf";
if (File.Exists(dlcGTAV_folder))
{
File.Delete(dlcGTAV_folder);
}
MessageBox.Show("Установка началась, ожидайте.");
wc.DownloadFileAsync(new Uri(url), @"C:\Users\Администратор\Desktop\dlc.rpf");
}
Вот код FDB
private void pictureBox2_Click(object sender, EventArgs e)
{
MessageBox.Show("Выберите корневую папку с GTA V");
FolderBrowserDialog FBD = new FolderBrowserDialog
{
ShowNewFolderButton = false
};
if (FBD.ShowDialog() == DialogResult.OK)
{
MessageBox.Show($"Выбрана папка: {FBD.SelectedPath}");
}
}
Ответы (1 шт):
К примеру, у вас есть относительный путь
string path = @"dlc_files\clothes";
Далее вы получаете корневую папку, не важно откуда
string root = @"C:\Games\GTAV";
Чтобы собрать путь воедино, можно использовать конкатенацию строк
// плохой код
string fullPath = root + @"\" + path;
Но с этим есть проблема, вы можете не угадать, есть ли бэкслеш \ на стыке строк и или нужно его добавить. А может там два слеша и нужно убрать лишний. Вот чтобы об этом не думать, есть спецаильный метод класса Path - Path.Combine, он сам позаботится о том, чтобы собрать две или более частей пути в один правильно.
string fullPath = Path.Combine(root, path); // C:\Games\GTAV\dlc_files\clothes
Вынесите код загрузки в отдельный метод
private async Task DownloadAsync(string path)
{
WebClient wc = new WebClient();
string url = "https://paragonproject.ru/dlc_files/clothes/clothes_1/" + Path.GetFileName(path);
if (File.Exists(path))
{
File.Delete(path);
}
await wc.DownloadFileAsync(new Uri(url), path);
}
И вызовите его из обработчика
private async void pictureBox2_Click(object sender, EventArgs e)
{
MessageBox.Show("Выберите корневую папку с GTA V");
FolderBrowserDialog FBD = new FolderBrowserDialog
{
ShowNewFolderButton = false
};
if (FBD.ShowDialog() == DialogResult.OK)
{
MessageBox.Show($"Началась загрузка в папку: {FBD.SelectedPath}");
await DownloadAsync(Path.Combine(FBD.SelectedPath, "dlc.rpf"));
MessageBox.Show("Загрузка завершена");
}
}
Кстати, отвыкайте использовать MessageBox, выводите статус в StatusStrip или просто в Label