C # не загружается - PullRequest
       2

C # не загружается

0 голосов
/ 22 марта 2019

У меня проблема с загрузкой файлов через C #.

У меня есть класс, который обрабатывает загрузку так:

namespace Ultra_Script
{
    class FileDownloader
    {

        private readonly string _url;
        private readonly string _fullPathWheretoSave;
        private bool _result = false;
        private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(0);

        public FileDownloader(string url, string fullPathWheretoSave)
        {

            if (string.IsNullOrEmpty(url)) throw new ArgumentNullException("url");
            if (string.IsNullOrEmpty(fullPathWheretoSave)) throw new ArgumentNullException("fullPathWhereToSave");

            this._url = url;
            this._fullPathWheretoSave = fullPathWheretoSave;

        }

        public bool StartDownload(int timeout)
        {

            try
            {
                System.IO.Directory.CreateDirectory(Path.GetDirectoryName(_fullPathWheretoSave));

                if (File.Exists(_fullPathWheretoSave))
                {
                    File.Delete(_fullPathWheretoSave);
                }
                using (WebClient client = new WebClient())
                {
                    var ur = new Uri(_url);
                    //client.Credentials = new NetworkCredential("username", "password");
                    client.DownloadProgressChanged += WebClientDownloadProgressChanged;
                    client.DownloadFileCompleted += WebClientDownloadCompleted;
                    Console.WriteLine(@"Downloading File:");
                    client.DownloadFileAsync(ur, _fullPathWheretoSave);
                    _semaphore.Wait(timeout);
                    return _result && File.Exists(_fullPathWheretoSave);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Cant download file");
                Console.Write(e);
                return false;
            }
            finally
            {
                this._semaphore.Dispose();
            }

        }

        private void WebClientDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.Write("/r   -->    {0}%", e.ProgressPercentage);
        }

        private void WebClientDownloadCompleted(object sender, AsyncCompletedEventArgs args)
        {
            _result = !args.Cancelled;
            if (!_result)
            {
                Console.Write(args.Error.ToString());
            }
            Console.WriteLine(Environment.NewLine + "Download Finished!");
            _semaphore.Release();
        }

        public static bool DownloadFile(string url, string fullPathWhereToSave, int timeoutInMilliSec)
        {
            return new FileDownloader(url, fullPathWhereToSave).StartDownload(timeoutInMilliSec);
        }

    }
}

И я назвал это так:

public static void InstallBasicSW()
        {

            var succes = FileDownloader.DownloadFile("https://github.com/Corbieman/Basic_SW/raw/master/JaVa.exe", "C:\\Windows", 99999999);
            Console.WriteLine("Done - Succes: " + succes);
            Console.ReadLine();

        }

Но только то, что я получаю в консоли:

Загрузка завершена!

Готово - Succes: False;

Я не получаю ни сообщения об ошибке, ни индикатор выполнения. Это сообщение просто всплывает мгновенно. И файл не загружается в этот путь. Кто-нибудь знает или имеет представление, в чем может быть проблема?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Параметру метода DownloadFile необходим полный путь к файлу.

Попробуйте это:

    public static void InstallBasicSW()
    {
        var succes = FileDownloader.DownloadFile("https://github.com/Corbieman/Basic_SW/raw/master/JaVa.exe", @"C:\Temps\JaVa.exe", 99999999);
        Console.WriteLine("Done - Succes: " + succes);
        Console.ReadLine();
    }

Почему у тебя такой результат? Я думаю, это потому, что вы передаете путь к каталогу вместо пути к файлу. Загрузка отменяется и завершается немедленно.

Явное исключение будет более полезным ...

0 голосов
/ 24 марта 2019

Так что проблема была в том, что мне пришлось запустить его от имени администратора и исправить путь, как вы сказали, ребята.Работает сейчас, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...