Консольное приложение не может загрузить файл?

Начал писать простое консольное приложение, которое загружает файл в текущее местоположение. По какой-то причине, независимо от размера файла, веб-клиент, который я использую, загружает только 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() + "%");
        }
    }
}
Другие вопросы по тегам