Autore Topic: Verificare se un file può essere eseguito  (Letto 1183 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Verificare se un file può essere eseguito
« il: 10 Marzo 2015, 07:44:52 CET »
0
Riscontro un problema alquanto strano.
Dovrei verificare se un file appena scaricato è ok,
ma in base alla mia funzione mi restituisce sia vero che falso e non capisco il perché!

Codice: [Seleziona]

  @Override
        protected void onPostExecute(String file_url) {
       
            File f = new File(...);
           
            boolean bool = f.canExecute();
            if(bool) {
                Toast.makeText(getApplicationContext(), "Questo file è ok", Toast.LENGTH_SHORT).show();
           }else{
              Toast.makeText(getApplicationContext(), "Questo file è corrotto", Toast.LENGTH_SHORT).show();
            }
La prova è che se il file è buono me lo ritorna sia true che false
mi sfugge qualcosa?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Verificare se un file può essere eseguito
« Risposta #1 il: 10 Marzo 2015, 08:34:47 CET »
0
E come fa a ritornare sia vero che falso?

Un nuovo stato quantistico del bit?  :-P
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #2 il: 10 Marzo 2015, 08:37:54 CET »
0
ciao,
in che senso?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Verificare se un file può essere eseguito
« Risposta #3 il: 10 Marzo 2015, 09:13:40 CET »
0
Il metodo da te chiamato torna o false o true.non può tornare sia false che true. Questo intende bradipao

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #4 il: 10 Marzo 2015, 09:28:40 CET »
0
ciao,
questo lo so, ma il problema è appunto questo, perché me li ritorna entrambi  O:-)
per completezza:

Codice: [Seleziona]
class DownloadFileFromURL extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(progress_bar_type);
        }

        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();

                int lenghtOfFile = conection.getContentLength();
                InputStream input = new BufferedInputStream(url.openStream(), 8192);
                OutputStream output = new FileOutputStream(..../tmp/" + fileName);
                byte data[] = new byte[1024];
                long total = 0;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));
                    output.write(data, 0, count);
                }

                output.flush();
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

        protected void onProgressUpdate(String... progress) {
            // setting progress percentage
            pDialog.setProgress(Integer.parseInt(progress[0]));
        }
@Override
        protected void onPostExecute(String file_url) {
       
            File f = new File(...);
           
            boolean bool = f.canExecute();
            if(bool) {
                Toast.makeText(getApplicationContext(), "Questo file è ok", Toast.LENGTH_SHORT).show();
           }else{
              Toast.makeText(getApplicationContext(), "Questo file è corrotto", Toast.LENGTH_SHORT).show();
            }

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Verificare se un file può essere eseguito
« Risposta #5 il: 10 Marzo 2015, 09:30:23 CET »
0
Sicuramente ti sbagli. Quel metodo torna un valore. Se vedi due toast significa che quel thread è avviato 2 volte

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #6 il: 10 Marzo 2015, 09:37:43 CET »
0
si, ma se viene avviato due volte mi dovrei aspettare due true No un true un false

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Verificare se un file può essere eseguito
« Risposta #7 il: 10 Marzo 2015, 09:43:52 CET »
0
Il return del doinbackground torna il parametro che passi nel onPost(). Non vorrei fosse quello il problema

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #8 il: 10 Marzo 2015, 09:48:32 CET »
0
quindi cosa mi consigli di provare?

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Verificare se un file può essere eseguito
« Risposta #9 il: 10 Marzo 2015, 10:59:29 CET »
0
Scusa ma per te un file eseguibile che cosa è? Ti ricordo che il sistema operativo usato da Android è Linux.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #10 il: 10 Marzo 2015, 11:23:33 CET »
0
allora quando scarico un file mi voglio accertare che questo non sia corrotto.
Forse non mi sono spiegato bene, ti rigiro la domanda come faccio a verificare se un file è corrotto?



Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Verificare se un file può essere eseguito
« Risposta #11 il: 10 Marzo 2015, 13:03:13 CET »
0
Allora non centra assolutamente nulla se è eseguibile

Ricevere correttamente un file dipendente dai controlli fatti per ricevelo. Quello più banale è ricevelo senza errore, semplice ma non sicuro. Il livello successivo si aggiunge una informazione accessoria come il CRC, vecchio metodo ma ancora funzionante. Un ulteriore livello sono tecniche di firma digitale con algoritmi di hash function come MD5, ormai non più sicuro o i più moderni SHA-1, SHA-2 e SHA-3.



Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Verificare se un file può essere eseguito
« Risposta #12 il: 10 Marzo 2015, 15:40:14 CET »
0
se avresti un link da passarmi te ne sarei grato.
Andiamo a noi, io scarico questo file ed una volta
salvato nel dispositivo ne vado a leggere i dettagli:


Eseguibile:No nel mio caso so per certo che il file è corrotto.
Adesso come faccio via codice ad ottenere queste informazioni?
 

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Verificare se un file può essere eseguito
« Risposta #13 il: 10 Marzo 2015, 16:00:43 CET »
0
Se scarichi un file da internet. Scarichi dei bit. Quindi se crei il file prova.apk, il file è leggibile e non corrotto ed è eseguibile. Se gli stessi bit li "metti" in un file di nome prova.mp3, il file non è corrotto, è leggibile, ma non è eseguibile.

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Verificare se un file può essere eseguito
« Risposta #14 il: 10 Marzo 2015, 16:05:04 CET »
0
Devi aver prima calcolato il valore della hash function del file che trasferisci, poi se lo hai ricevuto senza errori devi calcolare hash function del file ricevuto e confrontarlo con quello di partenza. Se sono uguali hai un'alta probabilità che il file non è corrotto.

Le API di Android hanno già le funzioni di hash, qui c'è un esempio che usa MD5:

http://developer.android.com/reference/java/security/MessageDigest.html

Naturalmente devi aver accesso al file remoto altrimenti non puoi calcolare in precedenza il valore del hash function e inviarlo a chi riceve.

P.S. Il bit di eseguibile serve solo per i file binari di programmi eseguibili compilati per la CPU utilizzata dal device o per gli script specifici di qualche linguaggio interpretato. Non indica assolutamente nulla sulla correttezza del file.


Inviato dal mio Nexus 5 utilizzando Tapatalk
« Ultima modifica: 10 Marzo 2015, 16:12:36 CET da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG