Консольное приложение не может загрузить файл?
Начал писать простое консольное приложение, которое загружает файл в текущее местоположение. По какой-то причине, независимо от размера файла, веб-клиент, который я использую, загружает только 1 КБ файла (независимо от его размера). Я попытался добавить браузер в заголовок, я попытался добавить "while (WC.IsBusy)" (предложение, которое я нашел во время поиска в Google), я даже попытался добавить обработчик ошибок в законченный обработчик, чтобы увидеть, что происходит, но это выдает "Ссылка на объект не установлена на экземпляр объекта.". Я дергаю себя за волосы и надеюсь, что кто-то увидит то, чего нет у меня.
Вот мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Diagnostics;
using System.Windows.Forms;
namespace csgocfgmakerupdater
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
{
instalwithargs(args);
}
else
{
installnoargs();
}
}
static void installnoargs()
{
Console.Clear();
Console.WriteLine("Current Folder: " + Directory.GetCurrentDirectory());
Console.WriteLine("");
Console.WriteLine("This will install the Counter-Strike: Global Offensive Config File Maker to your computer. Please select an option from the following:");
Console.WriteLine("");
Console.WriteLine("1. Install to Current Folder");
Console.WriteLine("2. Install to Custom Folder");
Console.WriteLine("3. Update Existing Installation in Current Folder");
Console.WriteLine("4. Update Existing Installation in Custom Folder");
Console.WriteLine("5. Exit");
string installcmd = Console.ReadLine();
switch (installcmd)
{
case "1":
try
{
string updurl = "http://cachefly.cachefly.net/100mb.test";//"http://elite.so/projects/cs-go-game-config-editor/CSGOCFGMKR.exe";
WebClient WC = new WebClient();
WC.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WC_DownloadProgressChanged);
WC.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(WC_DownloadFileCompleted);
WC.DownloadFileAsync(new Uri(updurl), "100mb.test");
//this waits for the webclient to exit
while (WC.IsBusy) {
Console.WriteLine("Downloading Updated files...");
}
Console.ReadKey();
}
catch (Exception ex)
{
Console.Clear();
Console.WriteLine(ex.Message);
}
break;
}
}
static void WC_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.UserState != e.Error)
{
Console.Clear();
Console.WriteLine("Update applied successfully!");
Console.ReadKey();
Environment.Exit(0);
}
else
{
MessageBox.Show(e.Error.Message);
}
}
static void WC_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.Clear();
Console.WriteLine("Downloading Updated files...");
Console.WriteLine(progperc.ToString() + "%");
}
}
}
2 ответа
Вы выходите из программы асинхронно до завершения загрузки. WC.IsBusy
Решение кажется законным, возможно, вам следует попробовать опубликовать этот код. Затем мы увидим, как это исправить.
И обработчик ошибок кажется очень хорошей идеей, вы должны иметь его на всякий случай.
Попробуй это. К вашему сведению, вы использовали и ссылаетесь на определенные пространства имен Windows Forms здесь.
using System;
using System.IO;
using System.Net;
namespace csgocfgmakerupdater
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
{
// instalwithargs(args);
}
else
{
installnoargs();
}
}
static void installnoargs()
{
Console.Clear();
Console.WriteLine("Current Folder: " + Directory.GetCurrentDirectory());
Console.WriteLine("");
Console.WriteLine("This will install the Counter-Strike: Global Offensive Config File Maker to your computer. Please select an option from the following:");
Console.WriteLine("");
Console.WriteLine("1. Install to Current Folder");
Console.WriteLine("2. Install to Custom Folder");
Console.WriteLine("3. Update Existing Installation in Current Folder");
Console.WriteLine("4. Update Existing Installation in Custom Folder");
Console.WriteLine("5. Exit");
string installcmd = Console.ReadLine();
switch (installcmd)
{
case "1":
try
{
string updurl = "http://elite.so/projects/cs-go-game-config-editor/CSGOCFGMKR.exe";
WebClient WC = new WebClient();
WC.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WC_DownloadProgressChanged);
WC.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(WC_DownloadFileCompleted);
WC.DownloadFileAsync(new Uri(updurl), "100mb.test");
Console.ReadKey();
}
catch (Exception ex)
{
Console.Clear();
Console.WriteLine(ex.Message);
}
break;
}
}
static void WC_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.UserState != e.Error)
{
Console.Clear();
Console.WriteLine("Update applied successfully!");
Console.ReadKey();
Environment.Exit(0);
}
else
{
}
}
static void WC_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.Clear();
Console.WriteLine("Downloading Updated files...");
Console.WriteLine(e.ProgressPercentage.ToString() + "%");
}
}
}
* Ответ на ваш комментарий: Ниже приведен тот же код, который я изменил URL файла, чтобы проверить, правильно ли поступает файл. Это установка Notepad ++ 7+ MB, которую я попробовал в качестве примера, и он успешно загрузил файл в папку bin, как и в предыдущем примере.
using System;
using System.IO;
using System.Net;
namespace csgocfgmakerupdater
{
class Program
{
static void Main(string[] args)
{
if (args.Length > 0)
{
// instalwithargs(args);
}
else
{
installnoargs();
}
}
static void installnoargs()
{
Console.Clear();
Console.WriteLine("Current Folder: " + Directory.GetCurrentDirectory());
Console.WriteLine("");
Console.WriteLine("This will install the Counter-Strike: Global Offensive Config File Maker to your computer. Please select an option from the following:");
Console.WriteLine("");
Console.WriteLine("1. Install to Current Folder");
Console.WriteLine("2. Install to Custom Folder");
Console.WriteLine("3. Update Existing Installation in Current Folder");
Console.WriteLine("4. Update Existing Installation in Custom Folder");
Console.WriteLine("5. Exit");
string installcmd = Console.ReadLine();
switch (installcmd)
{
case "1":
try
{
//string updurl = "http://elite.so/projects/cs-go-game-config-editor/CSGOCFGMKR.exe";
string updurl = "http://download.tuxfamily.org/notepadplus/6.5.4/npp.6.5.4.Installer.exe";
WebClient WC = new WebClient();
WC.DownloadProgressChanged += new DownloadProgressChangedEventHandler(WC_DownloadProgressChanged);
WC.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(WC_DownloadFileCompleted);
WC.DownloadFileAsync(new Uri(updurl),"test.exe");
Console.ReadKey();
}
catch (Exception ex)
{
Console.Clear();
Console.WriteLine(ex.Message);
}
break;
}
}
static void WC_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
if (e.UserState != e.Error)
{
Console.Clear();
Console.WriteLine("Update applied successfully!");
Console.ReadKey();
Environment.Exit(0);
}
else
{
}
}
static void WC_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Console.Clear();
Console.WriteLine("Downloading Updated files...");
Console.WriteLine(e.ProgressPercentage.ToString() + "%");
}
}
}