Wywoływanie async Task

0

Witam,

mam prośbę o pomoc w następującej kwestii. Na wstępie zaznaczam, że jest początkujący w C#.
Chciałem napisać apkę, która pobierać będzie z użyciem HttpClient plik z określonego adresu WWW i będzie ten plik zapisywać w określonej lokalizacji lokalnej na komputerze.
Na stronie Code4it podanej w kodzie poniżej znalazłem kod, który powinien na to pozwolić. Niestety nie wiem jak go wywołać. Wiersz var task = Task Run... zwraca błąd "CS0120 An object reference is required for the non-static field, method, or property ".

Będę wdzięczny za pomoc!

using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace HttpClientTest
{
    class Program
    {
        static void Main(string[] args)
        {
            
            string sourceURL = String.Format("https://plikplaski.mf.gov.pl/pliki//20240129.7zip");
            string targetDirectory = String.Format(@"D:\Users\TestUser\Downloads\X\");
            string targetFileName = String.Format(@"20240129.7zip");
            //var task = Task.Run(() => DownloadAndSave(sourceURL, targetDirectory, targetFileName)); Jak wywołać DownloadAndSave
            task.Wait(); 
        }

        // the following code is from https://www.code4it.dev/blog/download-and-save-files/
        async Task DownloadAndSave(string sourceFile, string destinationFolder, string destinationFileName)
        {
            Stream fileStream = await GetFileStream(sourceFile);

            if (fileStream != Stream.Null)
            {
                await SaveStream(fileStream, destinationFolder, destinationFileName);
            }
        }

        async Task<Stream> GetFileStream(string fileUrl)
        {
            HttpClient httpClient = new HttpClient();
            try
            {
                Stream fileStream = await httpClient.GetStreamAsync(fileUrl);
                return fileStream;
            }
            catch (Exception ex)
            {
                return Stream.Null;
            }
        }

        async Task SaveStream(Stream fileStream, string destinationFolder, string destinationFileName)
        {
            if (!Directory.Exists(destinationFolder))
                Directory.CreateDirectory(destinationFolder);

            string path = Path.Combine(destinationFolder, destinationFileName);

            using (FileStream outputFileStream = new FileStream(path, FileMode.CreateNew))
            {
                await fileStream.CopyToAsync(outputFileStream);
            }
        }
    }
}


2

To zacznij od czegoś prostszego.

1

Dodaj static do metod DownloadAndSave, GetFileStream, SaveStream i pozbędziesz się błedu.

Ale nie wygląda to optymistycznie, bo to podstawy, a komunikat błędu naprowadza na rozwiązanie.

0
some_ONE napisał(a):

Dodaj static do metod DownloadAndSave, GetFileStream, SaveStream i pozbędziesz się błedu.

Ale nie wygląda to optymistycznie, bo to podstawy, a komunikat błędu naprowadza na rozwiązanie.

Dzięki za szybką odpowiedź. Zgodnie z sugestią dodałem static, ale plik nie jest pobierany. Kompilacja kończy się bez błędu teraz, przy debuggowaniu w ogóle nie przechodzi do DownloadAndSave a w output dostaję: Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.dll The program '[36496] HttpClientTest.exe' has exited with code 0 (0x0).

1

No bo pewnie plik, który chcesz pobrać nie istnieje.
Ten sourceURL z pierwszego postu rzuca 404.

0
some_ONE napisał(a):

No bo pewnie plik, który chcesz pobrać nie istnieje.
Ten sourceURL z pierwszego postu rzuca 404.

Nie najlepszy początek tygodnia. Oczywiście masz rację. W URL i nazwie pliku zamiast 7zip powinno być 7z. Po zmianie działa poprawnie. Dziękuję serdecznie za pomoc.

0

I czego się nauczyłeś, oprócz "wplywu na ludzi" i wybłagania przez kogoś rozwiązania twojego problemu ?

Zacznij od podstaw

0

Próba zmuszenia do działania randomowego kodu z netu to też nauka, sam sie tak uczyłem

0
lion137 napisał(a):

Próba zmuszenia do działania randomowego kodu z netu to też nauka, sam sie tak uczyłem

Oczywiście że tak, ciśgle sam sie tak uczę 😀
W tym wypadku nie skalał sobie własnych paluszków. 100% wybłagane

Do zadupc..a kodu z netu trzeba być lepszym niż do napisania własnoręcznie

1 użytkowników online, w tym zalogowanych: 0, gości: 1