IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Remplacer fileopen, fileclose par System.IO [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut Remplacer fileopen, fileclose par System.IO
    Bonjour,

    J'ai un problème pour remplacer mon code fait en fileclose, fileopen en IO.File.ReadAllBytes.

    Voici le code en fileopen, fileclose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Const filesplit = "@123456@"
    Dim file1, filezb4() As String
     
    FileOpen(1, Application.ExecutablePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
    file1 = Space(LOF(1))
    FileGet(1, file1)
    FileClose(1)
    filezb4 = Split(file1, filesplit)
    et voici mon code en IOBuilder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Const filesplit = "@123456@"
    Dim file1, filezb4() As String
     
    file1 = IO.File.ReadAllBytes(Application.ExecutablePath)
    filezb4 = Split(file1, filesplit)
    Une erreur est générée sur IO.File.ReadAllBytes(Application.ExecutablePath).
    Impossible de convertir une valeur de type 'Tableau à 1 dimension(s) de Byte' en 'String'
    J'ai beau convertir mais rien n'y fait, ça plante...

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ReadAllBytes renvoie un tableau de Byte, et tu essaies d'affecter le résultat à une variable de type String... ça ne peut pas fonctionner. Il faut déclarer file1 comme un tableau de Byte.

    Qu'est-ce que tu cherches à faire exactement ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    Oui je sais, j'ai essayé mais le problème c'est que si je fais ça j'ai le même problème pour le split.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Const filesplit = "@123456@"
    Dim file1 as byte()
    Dim filezb4() As String
     
    file1 = IO.File.ReadAllBytes(Application.ExecutablePath)
    filezb4 = Split(file1, filesplit)
    Même erreur mais à filezb4 = Split(file1, filesplit).
    Et même en mettant tout en byte, j'ai toujours la même erreur.

    En fait le but est de faire un programme qui crypterait mon code afin qu'on ai des difficultés à le décrypter et donc moins de chance qu'on puisse me le voler.

    Là je fais mon stub, mon crypter est déjà opérationnel.
    Mon crypter va utiliser mon stub pour créer mon fichier crypté (protégé).

    Jusqu'à présent j'utilisais fileopen, fileclose mais j'ai lu à plusieurs endroits qu'il vaut mieux utiliser IOBuilder.

    Merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par *Gold* Voir le message
    En fait le but est de faire un programme qui crypterait mon code afin qu'on ai des difficultés à le décrypter et donc moins de chance qu'on puisse me le voler.
    Je comprends pas très bien ton histoire... c'est l'exécutable que tu veux crypter ? Il y a des obfuscateurs pour ça...

    De toutes façons, Split c'est pour les String, pas pour les données binaires

    Citation Envoyé par *Gold* Voir le message
    Jusqu'à présent j'utilisais fileopen, fileclose mais j'ai lu à plusieurs endroits qu'il vaut mieux utiliser IOBuilder.
    Je sais pas d'où tu sors ce terme "IOBuilder", ça n'existe pas... Normalement pour les entrées sorties on utilise les classes de l'espace de nom System.IO, je suppose que c'est de ça que tu parles.
    FileOpen, FileClose etc sont des "restes" hérités de VB6 qui ont été conservés pour faciliter la migration du code existant.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 12
    Par défaut
    Oui pardon je m'exprime mal.

    En fait c'est une sécurité supplémentaire, je crypte mon exécutable avant de l'obfusquer.

    Oui slip est pour les string, c'est pour ça que je pense qu'il faut tout mettre en string et non en bytes.

    Peut-être qu'en lisant et transformant les données de IO.File.ReadAllBytes(Application.ExecutablePath) en string ça peut corriger le problème ?
    Puis ensuite reconvertir le tout en byte (binaire) au moment de la compilation.

    Oui je parle de la classe System.IO et non IOBuilder.

    Voilà, j'aimerai éviter d'utiliser les restes de vb6 et coder qu'en vb.net.

    Merci.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par *Gold* Voir le message
    En fait c'est une sécurité supplémentaire, je crypte mon exécutable avant de l'obfusquer.
    Ca sert pas à grand chose... quelqu'un qui est déterminé à obtenir le code finira toujours par y arriver, même avec l'obfuscation. Et à moins que ton programme soit vraiment exceptionnel ou ou utilise des algos secrets très innovants, ça n'intéressera personne de te "voler" le code

    En plus, si tu cryptes l'exécutable, il ne pourra pas s'exécuter sans être décrypté. Pas très pratique...

    Citation Envoyé par *Gold* Voir le message
    Oui slip est pour les string
    Joli lapsus

    Citation Envoyé par *Gold* Voir le message
    c'est pour ça que je pense qu'il faut tout mettre en string et non en bytes.

    Peut-être qu'en lisant et transformant les données de IO.File.ReadAllBytes(Application.ExecutablePath) en string ça peut corriger le problème ?
    Puis ensuite reconvertir le tout en byte (binaire) au moment de la compilation.
    Si tu veux lire une chaine, utilise File.ReadAllText, pas File.ReadAllBytes. Mais de toutes façons ça n'a pas beaucoup de sens : le contenu de l'exécutable n'est pas du texte, c'est du binaire. Certaines parties sont interprétables en tant que texte, mais pour tout le reste le "texte" que tu vas obtenir sera incompréhensible, et en quand tu vas le réécrire, tu vas perdre des données à cause de l'encodage

    Citation Envoyé par *Gold* Voir le message
    Oui je parle de la classe System.IO et non IOBuilder.
    C'est un namespace (espace de nom), pas une classe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/07/2005, 21h44
  2. Réponses: 5
    Dernier message: 30/05/2005, 16h58
  3. Réponses: 2
    Dernier message: 15/03/2005, 15h40
  4. Remplacer plusieurs colonnes par un 'alias'
    Par zestrellita dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/04/2004, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo