Я пытаюсь загрузить файл из Интернета в локальную папку с ядром .net, хотя он компилируется без предупреждений или ошибок, при выполнении он показывает ошибку

using System;

namespace download_file
{
    class Program
    {
        static void Main(string[] args)
        {
            string zip_url = @"https://www.python.org/ftp/python/3.9.5/python-3.9.5-embed-amd64.zip";
            string current_directory = System.IO.Directory.GetCurrentDirectory();
            string dl_path = System.IO.Directory.CreateDirectory(System.String.Format(@"{0}\DL", current_directory)).FullName;
            
            string[] zip_url_words = zip_url.Split('/', 1);
            string downloaded_file_path = System.String.Format(@"{0}\{1}", dl_path, zip_url_words[zip_url_words.Length - 1]);

            // downloading the embedded python zip file
            file_download(zip_url, downloaded_file_path);

            void file_download(string url, string save_path)
            {
                if (url is null)
                {
                    return;
                }
                string[] url_word_array = url.Split('/', 1);

                if (save_path is null)
                {
                    save_path = System.IO.Directory.GetCurrentDirectory() + @"\" + url_word_array[url_word_array.Length - 1];  //rsplit
                }
                System.Net.WebClient client = new System.Net.WebClient();
                client.DownloadFile(url, save_path);
                //System.Console.WriteLine("Press any key...")
                //System.Console.ReadLine()
            }
        }
    }
}

enter image description here

1
zooid 15 Окт 2021 в 19:19

2 ответа

Лучший ответ

Я изменился

string[] zip_url_words = zip_url.Split('/', 1);

К

string[] zip_url_words = zip_url.Split('/', '1');

А также

string[] url_word_array = url.Split('/', 1);

К

string[] url_word_array = url.Split('/', '1');

Я скачал
Не могли бы вы попробовать еще раз?

1
Beso 15 Окт 2021 в 16:33

Проблема в этой строке:

string[] zip_url_words = zip_url.Split('/', 1);

Из документации:

    public String[] Split(char[]? separator, int count);
    //
    // Summary:
    //     Splits a string into a maximum number substrings based on the provided character
    //     separator.

Поэтому приведенный выше код возвращает ["https://www.python.org/ftp/python/3.9.5/python-3.9.5-embed-amd64.zip"] как значение переменной zip_url_words. Измените приведенный выше код так:

string[] zip_url_words = zip_url.Split('/');

Я внес изменения, и код у меня работает.

1
sushant 15 Окт 2021 в 17:22