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

Résolu
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005 - 5 juil. 2005 à 13:32
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005 - 5 juil. 2005 à 17:02
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

cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 16:02
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
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 13:44
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)
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 13:51
Ok, merci, je vais tenter cela tout de suite...
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 14:02
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...!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 14:15
peut-etre c'est le mode d'ouverture du fichier qui pose problème
essai une autre constante pour ouvrir en mode read-only
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 14:45
Ok, c'est bon, mon exe s'ouvre...
Par contre la ligne While location < EOF(1) me dit que location est < à EOF..
Pourquoi cela?
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 14:50
je pense qu'il faut tester sur Loc(1)<EOF(1)1
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 14:57
J'ai mis : While EOF(1) =
False et cela fonctionne...
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 15:22
bien vu ;)

n'oublie pas de cloturer le problème par une reponse accepter
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 15:24
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
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 15:30
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)
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 15:40
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
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 15:49
t'es entrain de lire dans le fichier ou écrire ??

(input avec OpenAccess.Read c'est contradictoire non ?)
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 15:50
pardon c'est moi qui pète un plomb
0
cs_frop01 Messages postés 1352 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 19 novembre 2008 2
5 juil. 2005 à 15:59
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.
0
cyrcroix Messages postés 21 Date d'inscription vendredi 9 avril 2004 Statut Membre Dernière intervention 5 juillet 2005
5 juil. 2005 à 17:02
C'est parfait...!!
0
Rejoignez-nous