C# - stáhnutí souboru přes JSON, aplikace padá

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od strangereu »

Ahoj,
dělám převážně jako PHP developer, ale náhodou jsem se dostal k C# a snažím se docílit stažení souboru z PHP array.

Jako první jsem začal s tím, že jsem udělal JSON request, který kontroluje, zda php soubor něco obsahuje, či nikoliv...
Pokud nic neobsahuje, tak není třeba cokoliv stahovat, ale pokud naopak obsahuje nějaký text, tak je nutné stáhnout text z arraye uvedené v JSON odpovědi v daném php souboru.
Ale abych nezačínal úplně hned stažením všeho z arraye, tak jsem zkusil stáhnout jednotlivý soubor pouze při odpovědi z JSONu v podmínce, ale došlo k tomu, že aplikace přestala pracovat, takže to vidím na chybu ve stahování, protože jakmile zakomentuju daný řádek, tak aplikace funguje normálně.

Zde je můj kód:

Kód: Vybrat vše

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;

namespace Letheria
{
    public partial class Letheria2 : Form
    {
        public Letheria2()
        {
            InitializeComponent();

            string latestBuild = System.IO.File.ReadAllText("latest_build"); //Přečte soubor latest_build a zjistí build klienta.

            /*System.Net.WebClient wc = new System.Net.WebClient();
            byte[] raw = wc.DownloadData("http://letheria2.cz/update.php?build=" + latestBuild);
            string dataToDownload = System.Text.Encoding.UTF8.GetString(raw);*/

            using (var webClient = new System.Net.WebClient())
            {
                var json = webClient.DownloadString("http://letheria2.cz/update.php?build=" + latestBuild); //Odešle na web aktuální build klienta, načež web vyhodnotí, zda je potřeba update, či nikoliv.
               
                if(json == "") { //Zjistí, jestli je odpověď z webu prázdná nebo obsahuje data ke stažení. Pokud obsahuje data ke stažení, tak se stáhne nová aktualizace, pokud ne, tak je klient aktuální.
                    currentBuild.Text = "Máš aktuální verzi klienta.";
                } else {
                    currentBuild.Text = json;

                    webClient.DownloadFile("http://letheria2.cz/client/koza.txt", "");
                }
            }
        }

        private void launchGame_Click(object sender, EventArgs e)
        {
   
        }

        private void launchSettings_Click(object sender, EventArgs e)
        {
            Process execGame = new Process();
            execGame.StartInfo.FileName = "Nastavení.exe";
            execGame.Start();
        }
    }
}
HondaCZE
Level 1
Level 1
Příspěvky: 51
Registrován: 10 úno 2012 12:10

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od HondaCZE »

Zkus to změnit na webClient.DownloadFile("http://letheria2.cz/client/", "koza.txt");

Nevím co používáš za nástroj pro vývoj, ale Visual Studio mě při zkompilování a spuštění kódu upozornilo, co je za chybu.
Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od strangereu »

Paráda, takhle to funguje...
No já také používám VC, ale kvůli cestě k latest_build, která je chybná se mi zbytek chyb neukáže.

Vždy zkompiluju a .exe z Debugu přehodím na místo, kde ve výsledku bude a teprve tam zkouším.
Je to sice nepraktické, ale potřebuju mít přístup k těm souborům se kterými to pracuje a nerad bych pak ve finále měnil všechny cesty až bude vše hotové.
Výsledný exe soubor bude ve složce s hrou pro můj herní server, bude sloužit jako launcher.
HondaCZE
Level 1
Level 1
Příspěvky: 51
Registrován: 10 úno 2012 12:10

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od HondaCZE »

A nemůžeš potřebné soubory nakopírovat do složky Debug, abys mohl kód pouštět a debugovat přímo z Visual Studia?

Ještě jedna věc. Jelikož se jedná o formulářovou aplikaci, tak pro inicializační kód se využívá metoda Form_Load, která se ti vygeneruje po dvojkliku na formulář v designeru.
Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od strangereu »

To samozřejmě můžu, to je fakt...

Jen bych se tedy ještě rád zeptal, když mi PHP vyhazuje array odpověď a já bych jí chtěl v C# použít a rozdělit na 2 části, jak bych to měl provést?

Array z PHP obsahuje ID buildu generované v PHP a soubory, které byly aktualizovány, takže potřebuji v C# zadat všechny soubory do toho DownloadFile a stáhnout je a následně z PHP array vyčíst položku "id", která ukrývá id buildu, které vepíšu do souboru "latest_build".

Zkoušel jsem něco pomocí Newtonsoft, ale rád bych se vyhl používání neoriginálních knihoven atd...
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od satik »

nebo můžeš nastavit, kam se ten exáč má házet - tedy třeba do složky kde máš ty data k tomu :)

O co že se snažíš? Zatím jsem to z toho popisu nepochopil, na serveru s PHP si vygeneruješ nějaký JSON data, ty C# aplikací stáhneš a co že to chceš dál?

V těch JSON datech je seznam souborů a ty je chceš stahovat na základě porovnání nějaký podmínky?
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Uživatelský avatar
strangereu
Level 4.5
Level 4.5
Příspěvky: 1719
Registrován: 17 zář 2011 12:36
Bydliště: Vršovice
Kontaktovat uživatele:

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od strangereu »

No takhle... Jedná se o launcher herního klienta s funkcí automatické aktualizace.

Na webu se nahraje aktuální verze, resp. její upravené soubory a PHP script vyhodnotí, které soubory byly upraveny oproti předchozí verzi a na základě toho sestaví array (JSON), která je následně odeslána do aplikace v C#, kde je nutné, aby aplikace z JSON odpovědi vybrala všechny soubory, které se mají stáhnout a v druhé části vybrala položku "id", která se zapíše do souboru latest_build.

Tohle je příklad odpovědi generované webem:
json odpoved.png
json odpoved.png (2.31 KiB) Zobrazeno 2144 x
Uživatelský avatar
satik
Level 6
Level 6
Příspěvky: 3509
Registrován: 09 led 2015 12:49
Bydliště: Krkonoše
Kontaktovat uživatele:

Re: C# - stáhnutí souboru přes JSON, aplikace padá

Příspěvek od satik »

a v čem přesně je problem? stahnout uz ho umis, tak ted uz jen to rozparsovat na jednotlivy zaznamy a porovnat :)
PC: MSI RTX 4090 Suprim X, AMD Ryzen 9 7950x3D, ASUS Crosshair HERO X6670E, 64GB RAM@6000CL30, Fractal Define Torrent, Seasonic PRIME TX 1600W, SSD Seagate Firecuda 530 M2 2TB +
4TB + 4TB SATA Micron 5200 ECO
Periferie: Samsung Odyssey G9 Neo + 2x AOC AG271QG, Razer Deathadder, Ducky Shine7, Steelseries QcK+, Beyerdynamic MMX300, Valve Index
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Pumpa u CPU - padá na 0 RPM po čistění PC
    od Faster1 » » v Problémy s hardwarem
    5 Odpovědi
    3593 Zobrazení
    Poslední příspěvek od Faster1
  • Aplikace pro analýzu videí
    4 Odpovědi
    6299 Zobrazení
    Poslední příspěvek od pavel2010
  • Mobilní aplikace ve stylu webové stránky
    od bradto » » v Programování a tvorba webu
    3 Odpovědi
    5851 Zobrazení
    Poslední příspěvek od HelFix
  • Blokování stahovaných souborů
    od Riviera kid » » v Windows 11, 10, 8...
    10 Odpovědi
    6769 Zobrazení
    Poslední příspěvek od Riviera kid
  • Velikost souboru a složek na disku
    od L.L » » v Vše ostatní (sw)
    5 Odpovědi
    5620 Zobrazení
    Poslední příspěvek od L.L

Zpět na „Programování a tvorba webu“