Page 1 sur 1
[R] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 19:27
par Ks10
Bonsoir à tous !
Voici un petit exemple du script :
Code : Tout sélectionner
#include <File.au3>
If FileExists(@ScriptDir & "\monfichier.txt") Then
Msgbox(64, "Informations", "OK")
Else
_FileCreate(@ScriptDir & "\monfichier.txt")
$file = FileOpen(@ScriptDir & "\monfichier.txt", 1)
FileWriteLine($file, "mon texte")
Endif
Ce que je souhaite faire c'est que mon programme crée une seul et unique fois ce fichier et si celui-ci est supprimer, il doit savoir qu'il ne doit plus la recrée. Je veux que ce fichier est crée qu'une seul fois et que mon programme reconnait qu'il a déjà était crée une fois. Et que si c'est le cas il envoie pètre xD
J'aurais besoin d'une idée de structure, des commandes nécessaires et une explication autour d'eux et sur les différentes façon de procéder.
Merci d'avance

Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:11
par Ks10
Je reviens vers vous ! J'ai fait mes tests de mon côtés et j'ai trouver une structure intéressante.
Voici l'idée de la structure :
- On jouera avec un fichier supplémentaire.
- Dans le répertoire du script on aura au préalable un fichier (verif.txt) déjà crée avec comme valeur "1" à l'intérieur.
- Lorsque l'utilisateur lance le programme, celui-ci écrit dans le fichier et incrémente la valeur 1 à 2.
- Le programme alors vérifie si le fichier principale (par exemple "test.txt") existe, si c'est le cas il affiche un message OK et si ce n'est pas le cas il crée le fichier MAIS avant de crée le fichier il vérifie dans le fichier "verif.txt" si la valeur est à 2.
- Si la valeur est à 2, le programme affiche un message "fichier déjà crée une fois".
Si le fichier "verif.txt" est supprimer, le programme affiche une erreur et quitte le programme également.
Seul soucis : Si le fichier est ouvert et que l'utilisateur modifie la valeur et met à 1. Le programme créera le fichier...
A moins qu'il faudrait rajouter également la valeur 1 et 2 à vérifier ? Pour plus de sécurité ?
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:15
par mikell
Sorry j'avais mal lu
Si la vérification doit se faire alors que le programme est encore ouvert, passer par une variable suffit
Si le programme est fermé puis relancé, il faut bien qu'il mémorise quelque part le fait que le fichier a existé
Dans ce cas si le fichier en question a toujours le même nom, tu peux faire une clé de registre custom avec comme valeur 1 (fichier déjà créé) ou 0 (fichier jamais créé)
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:19
par Ks10
Effectivement, _fileCreate est en trop désolé.
De ce côté il n'y a pas de problème mais relit mon énoncer principale et regarde ce que je cherche à faire

Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:24
par mikell
Hum j'ai édité le précédent

Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:33
par Ks10
mikell a écrit :
Si le programme est fermé puis relancé, il faut bien qu'il mémorise quelque part le fait que le fichier a existé
Dans ce cas si le fichier en question a toujours le même nom, tu peux faire une clé de registre custom avec comme valeur 1 (fichier déjà créé) ou 0 (fichier jamais créé)
Justement, pour vérifier si il a déjà existé j'ai utiliser le fichier "verif.txt" et je me suis baser sur les valeurs présentes.
J'ai utiliser cette méthode parce que je ne maitrise pas les clés de registre. Et le soucis avec une custom clé c'est que si l'utilisateur change le programme de pc, la clé de registre n'existera plus du coup il recréera à nouveau le fichier x)
Tandis que avec un fichier local si l'utilisateur le déplace, il déplace le fichier avec et la vérification est toujours possible.
Le programme peut donc déterminer si le fichier a déjà été crée ou pas grâce aux valeurs présentes dans le fichier "verif.txt"
Tu en pense quoi ?
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:42
par aulus
Ou alors, vous créez un fichier-bidon lors de la création du fichier qui doit être créé une seule fois. Et vous testez si ce fichier bidon existe. Si non, la création peut se faire. Si oui, la création ne peut pas se faire. Créez ce fichier bidon dans un autre dossier (ou à la racine du disque) afin que l'utilisateur ne le découvre pas (de peur qu'il ait l'idée de le supprimer parce que vide et donc inutile à ses yeux).
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:42
par Ks10
Le même problème persiste, si l'utilisateur déplace le programme sur un autre pc il n'a plus aucun repère x)
Le programme recréera un fichier bidon et le fichier en question.
Alors que je veux que le fichier soit crée une fois quelque soit le pc sur lequel il est.
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 20:48
par aulus
Le problème avec le fichier verif.txt, c'est que l'utilisateur peut le bidouiller.
A chaque ouverture du programme, lui faire vérifier si le fichier de création unique existe. Si oui, (re)créer le fichier-bidon.
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 21:54
par mikell
Ks10 a écrit :Le même problème persiste, si l'utilisateur déplace le programme sur un autre pc
C'est clair, et je répète : il faut bien que le programme mémorise quelque part le fait que le fichier a existé
Si l'exe est déplacé seul sans la mémorisation (quelle qu'elle soit) il n'y a AUCUN moyen qu'il se souvienne de quoi que ce soit
Edit
Rectification, il existe un moyen, l'externalisation internet
Tu stockes sur un ftp ou ailleurs ton fichier de vérif et le prog à chaque lancement va tester ce fichier
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 23:32
par jchd
Pour une sécurité accrue, tout mettre dans le nuage. Programme, identification et données : hop, dans le cloud.
Sinon tu auras toujours des soucis pour bloquer les possibilités de bidouillage.
Re: [..] Crée un fichier une seul et unique fois
Posté : mar. 02 juil. 2013 23:52
par jguinch
Salut.
Sinon, pour faire encore un peu de bricolage, on peut jouer avec la date de modification du programme (au lieu de créer un fichier de trace, on change la date de modification du programme)...
Ca reste du bricolage, loin de la sécurité qu'on aura en externalisant sur le cloud, mais c'est peut-être suffisant...
Edit :genre un petit truc comme ça :
► Afficher le texte
Code : Tout sélectionner
Global $origineDate = "20101010101010"
Global $lockDate = "20111111111111"
Global $lockEnv = "SUPER_PROTECTION_A_DEUX_BALLES"
Global $file = @DesktopDir & "\test.txt"
Global $EnvPath = EnvGet($lockEnv)
If $EnvPath = "" Then
If _IsLocked() Then
MsgBox(0, "", "Le fichier a déjà été créé")
Else
; On créé le fichier
$f = FileOpen($file, 1)
FileClose($f)
; On change la date du programme
_Lock()
EndIf
ElseIf StringRegExp(@Scriptname, "\A~~") Then
_Lock()
EndIf
MsgBox(0, "", "suite du programme..." , 2)
Func _IsLocked()
If FileExists($file) OR FileGetTime(@ScriptFullPath, 0, 1) = $lockDate Then Return 1
If FileGetTime(@ScriptFullPath, 0, 1) <> $origineDate Then Exit MsgBox(16, "", "Vous n'utilisez pas un programme valide")
Return 0
EndFunc
Func _Lock()
If $EnvPath = "" Then
FileCopy(@ScriptFullPath, @TempDir & "\~~" & @ScriptName, 1)
EnvSet($lockEnv, @ScriptFullPath)
Run( @TempDir & "\~~" & @ScriptName)
Else
ProcessWaitClose( StringRegExpReplace(@ScriptName, "\A~~", "") )
FileSetTime($EnvPath, $lockDate)
Run($EnvPath)
EndIf
Exit
EndFunc
Re: [..] Crée un fichier une seul et unique fois
Posté : mer. 03 juil. 2013 11:37
par Ks10
Je remercie tout le monde pour leurs idées et leurs conseils

La solution que j'ai choisie c'est externalisation sur le cloud.
L'avantage c'est que oui, si le fichier est à l'extérieur du poste il peut être vérifier à chaque fois et quelque soit le changement de poste effectuer.
Selon moi c'est la meilleur solution pour la sécurisation du programme.