PHP týden Předvánoční slevová akce
Pouze tento týden sleva až 80 % na PHP e-learning!
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde

Diskuze: System.IO.InvalidDataException

Aktivity (4)
Avatar
Jan Voženílek:20. srpna 15:06

Snažím se udělat instalátor pro jednu mojí aplikaci tak, aby si člověk stáhl aplikaci a zip soubor. Ten zip musí mít příponu OHInstall. Někde na řádku 27 nebo 29 to hodí System.IO.Inva­lidDataExcepti­on. Kód je zatím tenhle:

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.IO.Compression;
using System.IO;

namespace Zip
{
    public partial class Install : Form
    {
        public Install()
        {
            InitializeComponent();
        }

        private void Accept_CheckedChanged(object sender, EventArgs e)
        {
            if(Accept.Checked)
            {
                Start.Enabled = true;
            }
            else
            {
                Start.Enabled = false;
            }
        }

        private void Zip_FileOk(object sender, CancelEventArgs e)
        {
            string Path = Zip.FileName;
                using (FileStream fs = new FileStream(Path, FileMode.Open))
        {
                using (ZipArchive zip = new ZipArchive(fs))
                {
                      ZipArchiveEntry info = zip.GetEntry(Path);
                      info.Open();
                }
        }
        }

        private void Start_Click(object sender, EventArgs e)
        {
            Zip.Title = "Prosíme, vyberte soubor stažený s aplikací.";
            Zip.Filter = "Instalační balíček aplikací OH pro ShutdownBrowser|ShutdownBrowser.OHInstall";
            Zip.ShowDialog();
        }
    }
}

Díky za radu.

Zkusil jsem: Jsem pořád nezkušený a skoro nic nevím. Návod na "Zip a odzip" jsem našel tady. Ten člověk měl taky jinou příponu.

Chci docílit: Prostě potřebuji instalátor a nic jiného neumím, protože jde o dva soubory. :-(

 
Odpovědět
20. srpna 15:06
Avatar
Odpovídá na Jan Voženílek
don.jarducius:20. srpna 18:48

Zkus toto
Jednoduché, rychlé...

Nahoru Odpovědět
20. srpna 18:48
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Odpovídá na don.jarducius
Jan Voženílek:20. srpna 18:51

No. Tohle je pro jaký jazyk? Na c# to nevypadá. :-(

 
Nahoru Odpovědět
20. srpna 18:51
Avatar
Odpovídá na Jan Voženílek
don.jarducius:20. srpna 18:57

Nezávisí to na programovacím jazyku.
Je to jednoduchý postup s využitím 7zipu, kterým lze vytvořit instalátor. Pokud tedy nepotřebuješ nějaké extra fičury, což asi ne, tak ti to bude vyhovovat. Umí to po rozbalení spustit příkaz, např. spustit program.

Nahoru Odpovědět
20. srpna 18:57
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
zelvicek
Člen
Avatar
Odpovídá na Jan Voženílek
zelvicek:21. srpna 7:11
  1. zjisti (debugováním), na kterém řádku je ta vyjímka vyhazována.
  2. každá exception má vlastnost Message, která by měla příčinu vyjímky vysvětlit. Dále může mít hodnotu ve vlastnosti InnerException, která také blíže popisuje důvod vyjímky. Takže si to blíže prostuduj.
 
Nahoru Odpovědět
21. srpna 7:11
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na zelvicek
Jan Voženílek:21. srpna 9:00

Na řádku 39 mi to říká tohle:

System.IO.Inva­lidDataExcepti­on: Nebyl nalezen záznam Konec centrálního adresáře.

Já výjimkám nerozumím, takže prosím o vysvětlení.
Díky.
Přišel jsem na to, že to potřebuje nějaký centrální adresář. Co to je?

Editováno 21. srpna 9:03
 
Nahoru Odpovědět
21. srpna 9:00
Avatar
Odpovídá na Jan Voženílek
don.jarducius:21. srpna 10:47

V proměnný Path má být co? Páč tam máš název zip archívu a pak v tom zip archívu hledáš znovu ten archív. To bude ten bug. -> Nebyl nalezen záznam. | Konec centrálního adresáře.

Nahoru Odpovědět
21. srpna 10:47
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
zelvicek
Člen
Avatar
Odpovídá na Jan Voženílek
zelvicek:21. srpna 11:01

Z tvého příspěvku jsem získal dojem že:

  1. místo vyhazování vyjímky se mění. Předpokládám, že se mění podle neznámého algoritmu, neboť další vysledované příznaky bys uvedl, abys urychlil vyřešení problému, neboť na tom máš vlastní zájem. Nebo ne?
  2. nemáš odvahu používat webové vyhledávače. Tímto bych ti chtěl dodat odvahu, aby ses nebál a klidně zkusil sám vyhledat dobře zdokumentované informace o vyjímkách/excep­tions. Stejně tak třída ZipArchive je dobře zdokumentovaná včetně možných/očekávaných vyjímek a jejich příčin.
 
Nahoru Odpovědět
21. srpna 11:01
Avatar
zelvicek
Člen
Avatar
Odpovídá na don.jarducius
zelvicek:21. srpna 11:15

Domnívám se, že to ta příčina nebude. Zmíněný řádek 39 obsahuje

ZipArchive zip = new ZipArchive(fs)

. V tomto kódu se proměnná "Path" ještě podruhé nepoužívá.

Za určitých podmínek může být uvedený kód funkční. Přesto souhlasím, že dvojí různé použití proměnné "Path" je přinejmenším podezřelé.

 
Nahoru Odpovědět
21. srpna 11:15
Avatar
Jan Voženílek:21. srpna 11:47

Asi máte pravdu. Místo vyhazování výjimky se nemění, jen jsem to nahoře blbě napsal. V proměnné Path má být cesta k tomu adresáři. Výstup z OpenFileDialog.

 
Nahoru Odpovědět
21. srpna 11:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.