Vince62290
Messages postés18Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention25 décembre 2010
-
19 déc. 2008 à 13:38
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024
-
19 déc. 2008 à 19:33
Bonjour à tous, dans la cadre d'une programmation procédurale j'ai développé une appli où l'utilisateur enregistre les informations de cette appli dans un fichier texte.
Le fichier est en accès aléatoire. Le fichier n'est pas lu, il est simplement enregistré.
Par contre la fonction freefille() me renvoie toujours le même numéro pour tous les fichiers, il ne s'incrémente pas !
Voilà mon code concernant la partie intéressante de l'appli et concernent mon problème :
Private
Sub btndevisenr_Click(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles btndevisenr.Click
With SFDdevis
'répertoire sur lequel s'ouvrira la boite.InitialDirectory =
"Mes documents"
'titre de la barre .Title =
"Enregistrer le devis"
'filtre, seules les fichiers spécifiés apparaîtront.Filter =
"Fichiers txt(*.txt)|*.txt"
'enfin on ouvre la boite de dialogue enfin.ShowDialog()
'après la fermeture de la boite de dialogue, le bouton 'annuler' a-t-il été cliqué ?
If Err.Number = 32755
Then
Exit
Sub
'si aucun choix
If Len(.FileName) = 0
Then
Exit
Sub
'nom du fichier choisi(avec extension)devis = .FileName
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 19 déc. 2008 à 15:32
Bonjour,
Utilises plutôt :
IO.File.Open(...)
Ensuite utilises le flux obtenu en n'oubliant pas de le fermer.
Ensuite, N'utilises plus Err (On Error Goto, ...) en .NET, utilises Try/catch.
Et pour les boites de dialogues, utilises le retour de la fonction ShowDialog de la boite de dialogue et contrôle si c'est une annulation.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 déc. 2008 à 17:10
Pour info, il est normal que FreeFile te renvoie toujours la même valeur.
FreeFile le premier n° libre de fichier.
Tu ouvre ton fichier, tu fais tes écritures, puis tu ferme le fichier. Tu libère donc ce n° de fichier.
Donc lorsque tu rapelle FreeFile, si ce n° n'a pas été utilisé entre temps, il te renvoie le même.
Vince62290
Messages postés18Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention25 décembre 2010 19 déc. 2008 à 17:22
Merci BEAUCOUP NHenri, ça marche à part une petit chose :
en ce qui concerne le fichier texte aucun problème (je déclare un StreamWriter qui reçoit la propriété Createtext de la classe File avec mon nom de fichier en paramètre).
pour le try/catch également, aucun problème, bien que j'ai du mettre à l'intérieur de mon try tout le code qui écrit dans le fichier texte (Writeline,etc....).
sinon j'ai un petit problème avec le retour de Showdialog(), il ne me l'accepte pas dans les cas suivants que j'ai essayé :
1 : Catch ex
As Exception
When ShowDialog.Cancel = Windows.Forms.DialogResult.Cancel
Exit
Sub
2 : Catch ex
As Exception
When ShowDialog.Cancel = True
Exit
Sub
3 : Catch ex
As Exception
When ShowDialog.Cancel = 2
Exit
Sub
Il me souligne comme avertissement à chauqe fois "SHOWDIALOG" en me disant que l'expression qualifiante ne sera pas évaluée....
Vince62290
Messages postés18Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention25 décembre 2010 19 déc. 2008 à 17:24
Merci pour l'info casy, dans ce cas là perso je ne trouve pas que FreeFile() soit d'un grand intérêt s'il faut laisser ouvert le fichier précédent pour qu'il s'incrémente.
A moins qu'il existe un bidoullage que je ne connait pas mais bon..
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 déc. 2008 à 17:43
Il n'y a aucun intérêt particulier à ce que le n° de fichier augmente. Le but est d'obtenir un n° de fichier disponible afin de ne pas utiliser un n° déjà occuper et d'aller taper dans un autre fichier que celui que tu as ouvert.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 déc. 2008 à 19:11
Dans ce cas il ne faut pas te basé sur FreeFile pour calculer ton incrément de commande. Car d'une part, comme tu as pu le constater, non seulement, FreeFile ne te garantie pas un incrément, mais il ne te garantie pas non plus des numéros successifs. Tu peux même obtenir un n° inférieur au n° précédent si 2 fichiers ont été fermé successivement.
D'ailleurs généralement, comme tu n'ouvre qu'un seul fichier à la fois, FreeFile renvoie la pluspart du temps 1 comme numéro.
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 19 déc. 2008 à 19:33
Bonjour,
Pour l'histoire de l'annulation :
if CommonDialog.ShowDialog()=(Quelquechose).Cancel then exit sub
'CommonDialog est ta boite de dialogue
Ensuite, je ne connais pas la syntaxe : Catch Ex as exception When ...