Problème d'équivalence VB6 -> VB.NET

Résolu
Signaler
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005
-
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005
-
Bonjour,
Existe t'il une fonction sous VB.NET similaire à la fonction "Loc(filenumber)" de VB6 qui permet d'indiquer la position de lecture/écriture courante dans un fichier ouvert?
Merci pour votre aide

16 réponses

Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
ah voila j'ai pas vu l'ouverture du fichier en mode bianire (OpenMode.Binary)

ptit expliquation :

Fichier binaire:

Dans les fichiers binaires on travaille sur les octets.

La syntaxe est la même que pour les fichiers Random, sauf qu'on travaille sur la position d'un octet et non sur un numéro d'enregistrement.

Pour ouvrir un fichier binaire:

FileOpen(FileNumber, FileName, OpenMode.Binary)


FileGet et FilePut permettent de lire ou d'écrire des octets .

FileOpen(iFr, ReadString, OpenMode.Binary)
MyString = New String(" "c, 15) 'Créer une chaîne de 15 espaces
FileGet(iFr, MyString) ' Lire 15 caractères dans MyString
FileClose(iFr)
MsgBox(MyString)

Le fait de créer une variable de 15 caractères et de l'utiliser dans FileGet permet de lire 15 caractères.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
normalement ca existe en VB.NET

Public Function Loc(ByVal FileNumber As Integer) As Long


Extrait de MSDN .NET 2003

Exemple
Cet exemple utilise la fonction Loc pour retourner la position de lecture/écriture actuelle dans un fichier ouvert. Nous supposons que MYFILE est un fichier texte comportant quelques lignes de données exemple.

Dim location As Long
Dim oneLine As String
Dim oneChar As Char
FileOpen(1, "C:\MYFILE.TXT", OpenMode.Binary)
While location < EOF(1)
Input(1, oneChar)
location = Loc(1)
Debug.WriteLine(location & ControlChars.CrLf)
End While
FileClose(1)
Notes du développeur sur Smart Device
Cette fonction n'est pas prise en charge.

Prérequis
Espace de noms : Microsoft.VisualBasic

Module : FileSystem

Assembly : Microsoft Visual Basic .NET Runtime (dans Microsoft.VisualBasic.dll)
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

Ok, merci, je vais tenter cela tout de suite...
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

Le problème c'est que je dois ouvrir un fichier (executable) qui est déjà en utilisation, il ne veut pas s'ouvrir du coup...!
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
peut-etre c'est le mode d'ouverture du fichier qui pose problème
essai une autre constante pour ouvrir en mode read-only
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

Ok, c'est bon, mon exe s'ouvre...
Par contre la ligne While location < EOF(1) me dit que location est < à EOF..
Pourquoi cela?
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
je pense qu'il faut tester sur Loc(1)<EOF(1)1
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

J'ai mis : While EOF(1) =
False et cela fonctionne...
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
bien vu ;)

n'oublie pas de cloturer le problème par une reponse accepter
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

Tout cela fonctionne.. mais après quelques tours dans la boucle, la ligne : Input(1, oneChar) plante (elle génère une exception).
Voici le message de l'exception : " L'entrée dépasse la fin du fichier".
Voici mon code :





Dim num = FreeFile()


FileOpen(num, NomFichier, OpenMode.Binary, OpenAccess.Read)


longueur_fich = LOF(num_fich)



Do
While position + 512 < longueur_fich


Input(num_fich, Chaine)


position = Loc(num_fich)



For j = 1
To Len(Chaine)
Step 2


check = (check + (j * 1 + Asc(Mid$(Chaine, j, 1))))



Next j


VisuVersion.Text = "en cours ... " & Format$(Loc(num_fich) / longueur_fich, "0 %")



Loop
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
tout d'abord il déclarer tes variable comme (position , j et check) ensuite les initialisé à 0 si c'est nécessaire

pourquoi tu as enlever tu as mis

Do While position + 512 < longueur_fich

au lieu de

While not EOF(1)
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

Elles sont bien sur déclarées et initialisées...
C'est vrai, lol j'ai pas fais gaffe... mais le problème reste le même cela fonctionnait aussi.
Ma boucle fonctionne correctement mais plante au bout de quelques tours...
Merci de m'aider, c'est sympa
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
t'es entrain de lire dans le fichier ou écrire ??

(input avec OpenAccess.Read c'est contradictoire non ?)
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
pardon c'est moi qui pète un plomb
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
Est-ce que ton fichier est traité par ligne ??

Voici un exemple pour lire chaque ligne d'un fichier texte.

Dim Line As String
FileOpen(1, "MonFichier.txt", OpenMode.Input) ' Ouvre en lecture.
While Not EOF(1) ' Boucler jusqu'à la fin du fichier

Line = LineInput(1) ' Lire chaque ligne
Debug.WriteLine(Line) ' Afficher chaque ligne sur la console.


End While
FileClose(1) ' Fermer.
Messages postés
21
Date d'inscription
vendredi 9 avril 2004
Statut
Membre
Dernière intervention
5 juillet 2005

C'est parfait...!!