Я пытаюсь создать «файл-updater», который, когда программа открывается, обнаруживает, существует ли папка с именем «моды», соответствующие файлы и их размеры (в байтах) , На самом деле это работает! Но у меня есть ярлык, который сообщает, какой файл загружается, и он показывает только последнее сообщение «Actualizacion finalizada.Ya puedes jugar!» вместо «Descargando» + ArmorSts »,« Descargando »+ TreeCpt» и «blablabla». , как я могу сообщить с меткой, какой файл я загружаю прямо сейчас и какой файл обновляется? если кто-то должен видеть сообщения на английском языке, дайте мне знать.C# - Проверить, существует ли файл и загрузить
string ArmorSts = "[1.7.10]ArmorStatusHUD-client-1.28.jar";
string TreeCpt = "[1.7.10]Treecapitator-universal-2.0.4.jar";
string AdvSolar = "AdvancedSolarPanel-1.7.10-3.5.1.jar";
private void Form1_Load(object sender, EventArgs e)
{
string path = @"C:\Users\" + System.Environment.UserName + "\\AppData\\Roaming\\.minecraft\\mods\\";
if (!Directory.Exists(path)) /* Si no existe, entonces... */
{
MessageBox.Show("La carpeta .minecraft (" + path + ") no se encuentra. Por favor instale minecraft.",
"Error al encontrar el directorio",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
/* Busquemos el directorio entonces... */
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
}
/* si cancelamos entonces cerramos el programa */
else
{
Application.Exit();
}
}
/* Si la carpeta existe, entonces... */
else {
/* Si el mod esta, entonces... */
FileInfo mod_1 = new FileInfo(path + ArmorSts);
/* Checkeamos si pesa igual */
if (File.Exists(path + ArmorSts) && mod_1.Length == 27281)
{
label1.Text = ArmorSts + " - Actualizado";
goto Siguiente_1;
}
else
{
/* Si el mod no esta o pesa diferente, entonces */
label1.Text = "Descargando " + ArmorSts;
/* Descargar en %appdata%/.minecraft/mods */
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://xipher.16mb.com/JallenCraft/Mods_Actualizados/" + ArmorSts), path + ArmorSts);
goto Siguiente_1;
}
Siguiente_1 :
FileInfo mod_2 = new FileInfo(path + TreeCpt);
if (File.Exists(path + TreeCpt) && mod_2.Length == 94792)
{
label1.Text = TreeCpt + " - Actualizado";
goto Siguiente_2;
}
else
{
label1.Text = "Descargando " + TreeCpt;
/* Descargar en %appdata%/.minecraft/mods */
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://xipher.16mb.com/JallenCraft/Mods_Actualizados/" + TreeCpt), path + TreeCpt);
goto Siguiente_2;
}
Siguiente_2:
FileInfo mod_3 = new FileInfo(path + AdvSolar);
if (File.Exists(path + AdvSolar) && mod_3.Length == 305645)
{
label1.Text = AdvSolar + " - Actualizado";
goto Siguiente_3;
}
else
{
label1.Text = "Descargando " + AdvSolar;
/* Descargar en %appdata%/.minecraft/mods */
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://xipher.16mb.com/JallenCraft/Mods_Actualizados/" + AdvSolar), path + AdvSolar);
goto Siguiente_3;
}
/*
...
... and on and on and on ...
...
*/
Siguiente_23:
FileInfo mod_24 = new FileInfo(path + Witchery);
if (File.Exists(path + Witchery) && mod_24.Length == 7009956)
{
label1.Text = Witchery + " - Actualizado";
Thread.Sleep(1000);
ActualizacionFinalizada();
}
else
{
label1.Text = "Descargando " + Witchery;
/* Descargar en %appdata%/.minecraft/mods */
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://xipher.16mb.com/JallenCraft/Mods_Actualizados/" + Witchery), path + Witchery);
ActualizacionFinalizada();
}
}
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
colorProgressBar1.Value = e.ProgressPercentage;
}
private void Completed(object sender, AsyncCompletedEventArgs e)
{
Actualizando();
label1.Text = "Actualizado";
}
private void ActualizacionFinalizada()
{
Actualizando();
label1.Text = "Actualizacion finalizada. Ya puedes jugar!";
}
Я учусь C# независимо друг от друга, и я знаю, что это не правильный путь (повторять один и тот же код с небольшими изменениями), если есть лучший способ упростить этот код или с лучшей производительностью я буду очень благодарен!
Вам нужно будет очистить код, например, удалить «goto' и использовать язык немного больше, прежде чем вы получите прямые ответы здесь на SO. Перейдите к обмену стека кода обзора, а затем вернитесь со своей конкретной проблемой. – Arran
Вы можете прочитать о чистом коде. Есть несколько действительно хороших советов и рекомендаций по написанию кода поддерживаемого кода. Поскольку он стоит здесь, это не очень хороший вопрос для SO, потому что это не сводит к минимуму код проблемы. –
Существует http://ccd.ralfw.domainfactory-kunde.de/die-tugenden/ немецкий сайт о чистом коде. Но большинство терминов - английский. Примечание: сайт был изменен, и, похоже, не все ссылки в конечном формате. Точкой входа является http://clean-code-developer.de/ –