OVH Cloud OVH Cloud

API ReadFile

2 réponses
Avatar
Jérôme VERITE
Bonjour,

je cherche à lire un fichier texte en utilisant les API, mais je n'y
parvient pas.
J'arrive à remplir un tableau de bytes à partir du fichier, mais si je le
convertit,
ca va prendre trop de temps dans la mesure ou strMaChaine = bTableau ne
fonctionne pas car mon fichier texte possède un octet par caractère et pas 2
comme présumé dans cette conversion implicite.

Ainsi donc, j'ai bien essayé de passer ma chaine directement à ReadFile,
après avoir fait
strMaChaine = string(nSize,0) avec nSize, la taille du fichier. J'ai essayé
avec strptr mais rien.

Auriez-vous une idée ou un exemple?

Merci d'avance

Jérôme

2 réponses

Avatar
François Picalausa
Bonjour/soir,

Tu peux effectuer ta convertion via strConv.
Sinon, il faut passer la chaine byval lorsqu'elle sert de buffer:

Private Declare Function MonAPI Lib "Toto" Alias "MonAPIA" (byval Param As
String) As Long

Sub Test
Dim strBuffer As string
strBuffer = string$(TailleDeMonBuffer + 1,vbNullChar) '+1 pour qu'il y
ait de la place pour 1 zéro supplémentaire
If MonAPI(strBuffer) Then
...
End If
End Sub

VB fait alors automatiquement la conversion

Si tu utilise strPtr, il te faudra reconvertir ta chaine:

Private Declare Function MonAPI Lib "Toto" Alias "MonAPIA" (byval Param As
Long) As Long

Sub Test
Dim strBuffer As string
strBuffer = string$(TailleDeMonBuffer + 1,vbNullChar) '+1 pour qu'il y
ait de la place pour 1 zéro supplémentaire
If MonAPI(StrPtr(strBuffer)) Then
strBuffer=strConv(strBuffer,vbUnicode)
...
End If
End Sub

A noter toutefois que StrPtr ainsi que varptr et objptr ne sont pas
supportés!

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jérôme VERITE" a écrit dans le message de
news:
Bonjour,

je cherche à lire un fichier texte en utilisant les API, mais je n'y
parvient pas.
J'arrive à remplir un tableau de bytes à partir du fichier, mais si
je le convertit,
ca va prendre trop de temps dans la mesure ou strMaChaine = bTableau
ne fonctionne pas car mon fichier texte possède un octet par
caractère et pas 2 comme présumé dans cette conversion implicite.

Ainsi donc, j'ai bien essayé de passer ma chaine directement à
ReadFile, après avoir fait
strMaChaine = string(nSize,0) avec nSize, la taille du fichier. J'ai
essayé avec strptr mais rien.

Auriez-vous une idée ou un exemple?

Merci d'avance

Jérôme


Avatar
Jérôme VERITE
Merci beaucoup François, le byval lpBuffer as string marche tres bien

"François Picalausa" a écrit dans le message de news:
#
Bonjour/soir,

Tu peux effectuer ta convertion via strConv.
Sinon, il faut passer la chaine byval lorsqu'elle sert de buffer:

Private Declare Function MonAPI Lib "Toto" Alias "MonAPIA" (byval Param As
String) As Long

Sub Test
Dim strBuffer As string
strBuffer = string$(TailleDeMonBuffer + 1,vbNullChar) '+1 pour qu'il y
ait de la place pour 1 zéro supplémentaire
If MonAPI(strBuffer) Then
...
End If
End Sub

VB fait alors automatiquement la conversion

Si tu utilise strPtr, il te faudra reconvertir ta chaine:

Private Declare Function MonAPI Lib "Toto" Alias "MonAPIA" (byval Param As
Long) As Long

Sub Test
Dim strBuffer As string
strBuffer = string$(TailleDeMonBuffer + 1,vbNullChar) '+1 pour qu'il y
ait de la place pour 1 zéro supplémentaire
If MonAPI(StrPtr(strBuffer)) Then
strBuffer=strConv(strBuffer,vbUnicode)
...
End If
End Sub

A noter toutefois que StrPtr ainsi que varptr et objptr ne sont pas
supportés!

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jérôme VERITE" a écrit dans le message de
news:
> Bonjour,
>
> je cherche à lire un fichier texte en utilisant les API, mais je n'y
> parvient pas.
> J'arrive à remplir un tableau de bytes à partir du fichier, mais si
> je le convertit,
> ca va prendre trop de temps dans la mesure ou strMaChaine = bTableau
> ne fonctionne pas car mon fichier texte possède un octet par
> caractère et pas 2 comme présumé dans cette conversion implicite.
>
> Ainsi donc, j'ai bien essayé de passer ma chaine directement à
> ReadFile, après avoir fait
> strMaChaine = string(nSize,0) avec nSize, la taille du fichier. J'ai
> essayé avec strptr mais rien.
>
> Auriez-vous une idée ou un exemple?
>
> Merci d'avance
>
> Jérôme