Stránka 1 z 1

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

Napsal: 05 čer 2018 18:22
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();
        }
    }
}

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

Napsal: 05 čer 2018 19:06
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.

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

Napsal: 05 čer 2018 19:16
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.

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

Napsal: 05 čer 2018 19:37
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.

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

Napsal: 06 čer 2018 17:58
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...

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

Napsal: 06 čer 2018 18:19
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?

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

Napsal: 06 čer 2018 19:05
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 1832 x

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

Napsal: 06 čer 2018 19:35
od satik
a v čem přesně je problem? stahnout uz ho umis, tak ted uz jen to rozparsovat na jednotlivy zaznamy a porovnat :)