Private Function GetPrivateProfileString _
( _
ByRef sSection As String, _
ByRef sKey As String, _
ByRef sDefault As String, _
ByRef sFileName As String _
) As String
GetPrivateProfileString = String$(255, Chr$(0))
Call GetPrivateProfileStringA(sSection, sKey, sDefault,
GetPrivateProfileString, 255, sFileName)
End Function
Private Function GetPrivateProfileString _
( _
ByRef sSection As String, _
ByRef sKey As String, _
ByRef sDefault As String, _
ByRef sFileName As String _
) As String
GetPrivateProfileString = String$(255, Chr$(0))
Call GetPrivateProfileStringA(sSection, sKey, sDefault,
GetPrivateProfileString, 255, sFileName)
End Function
Private Function GetPrivateProfileString _
( _
ByRef sSection As String, _
ByRef sKey As String, _
ByRef sDefault As String, _
ByRef sFileName As String _
) As String
GetPrivateProfileString = String$(255, Chr$(0))
Call GetPrivateProfileStringA(sSection, sKey, sDefault,
GetPrivateProfileString, 255, sFileName)
End Function
Bonjour/soir,
"Zoury" a écrit dans le message de
news:
> Private Function GetPrivateProfileString _
> ( _
> ByRef sSection As String, _
> ByRef sKey As String, _
> ByRef sDefault As String, _
> ByRef sFileName As String _
> ) As String
> GetPrivateProfileString = String$(255, Chr$(0))
> Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> GetPrivateProfileString, 255, sFileName)
> End Function
Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors de
relecture...
Mais pour 30 ou 40, il y a peut-être un petit problème...
Des chemins comme ceux que tu as données représentent à peu près 10
caractères en moyenne.
10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
Voici un bout de code permettant de ne pas être limité aux 255 caractères:
'Dans un module
Private Declare Function GetPrivateProfileString _
Lib "kernel32" _
Alias "GetPrivateProfileStringA" _
( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String _
) _
As Long
Public Function GetIniEntry _
( _
FileName As String, _
Section As String, _
Key As String, _
Optional DefaultValue As String = "" _
) _
As String
Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
bContinue = True
buffersize = 255
Do While bContinue
GetIniEntry = String$(buffersize, vbNullChar)
ReturnCode = GetPrivateProfileString( _
Section, _
Key, _
DefaultValue, _
GetIniEntry, _
buffersize, _
FileName _
)
'The return value is the number of characters copied to the
' not including the terminating null character.
'
'If neither lpAppName nor lpKeyName is NULL
' and the supplied destination buffer is too small
' to hold the requested string, the string is truncated
' and followed by a null character,
' and the return value is equal to nSize minus one.
If ReturnCode = buffersize - 1 _
And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop court
buffersize = buffersize + 255 'incrémente par pas de 255
Else
GetIniEntry = Left$(GetIniEntry, ReturnCode)
bContinue = False
End If
Loop
End Function
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Bonjour/soir,
"Zoury" <yanick_lefebvre@hotmail.com> a écrit dans le message de
news:em4RwvxcDHA.1880@TK2MSFTNGP10.phx.gbl...
> Private Function GetPrivateProfileString _
> ( _
> ByRef sSection As String, _
> ByRef sKey As String, _
> ByRef sDefault As String, _
> ByRef sFileName As String _
> ) As String
> GetPrivateProfileString = String$(255, Chr$(0))
> Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> GetPrivateProfileString, 255, sFileName)
> End Function
Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors de
relecture...
Mais pour 30 ou 40, il y a peut-être un petit problème...
Des chemins comme ceux que tu as données représentent à peu près 10
caractères en moyenne.
10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
Voici un bout de code permettant de ne pas être limité aux 255 caractères:
'Dans un module
Private Declare Function GetPrivateProfileString _
Lib "kernel32" _
Alias "GetPrivateProfileStringA" _
( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String _
) _
As Long
Public Function GetIniEntry _
( _
FileName As String, _
Section As String, _
Key As String, _
Optional DefaultValue As String = "" _
) _
As String
Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
bContinue = True
buffersize = 255
Do While bContinue
GetIniEntry = String$(buffersize, vbNullChar)
ReturnCode = GetPrivateProfileString( _
Section, _
Key, _
DefaultValue, _
GetIniEntry, _
buffersize, _
FileName _
)
'The return value is the number of characters copied to the
' not including the terminating null character.
'
'If neither lpAppName nor lpKeyName is NULL
' and the supplied destination buffer is too small
' to hold the requested string, the string is truncated
' and followed by a null character,
' and the return value is equal to nSize minus one.
If ReturnCode = buffersize - 1 _
And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop court
buffersize = buffersize + 255 'incrémente par pas de 255
Else
GetIniEntry = Left$(GetIniEntry, ReturnCode)
bContinue = False
End If
Loop
End Function
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Bonjour/soir,
"Zoury" a écrit dans le message de
news:
> Private Function GetPrivateProfileString _
> ( _
> ByRef sSection As String, _
> ByRef sKey As String, _
> ByRef sDefault As String, _
> ByRef sFileName As String _
> ) As String
> GetPrivateProfileString = String$(255, Chr$(0))
> Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> GetPrivateProfileString, 255, sFileName)
> End Function
Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors de
relecture...
Mais pour 30 ou 40, il y a peut-être un petit problème...
Des chemins comme ceux que tu as données représentent à peu près 10
caractères en moyenne.
10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
Voici un bout de code permettant de ne pas être limité aux 255 caractères:
'Dans un module
Private Declare Function GetPrivateProfileString _
Lib "kernel32" _
Alias "GetPrivateProfileStringA" _
( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String _
) _
As Long
Public Function GetIniEntry _
( _
FileName As String, _
Section As String, _
Key As String, _
Optional DefaultValue As String = "" _
) _
As String
Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
bContinue = True
buffersize = 255
Do While bContinue
GetIniEntry = String$(buffersize, vbNullChar)
ReturnCode = GetPrivateProfileString( _
Section, _
Key, _
DefaultValue, _
GetIniEntry, _
buffersize, _
FileName _
)
'The return value is the number of characters copied to the
' not including the terminating null character.
'
'If neither lpAppName nor lpKeyName is NULL
' and the supplied destination buffer is too small
' to hold the requested string, the string is truncated
' and followed by a null character,
' and the return value is equal to nSize minus one.
If ReturnCode = buffersize - 1 _
And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop court
buffersize = buffersize + 255 'incrémente par pas de 255
Else
GetIniEntry = Left$(GetIniEntry, ReturnCode)
bContinue = False
End If
Loop
End Function
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Je n'aurais qu'un mot à dire : Merci et bravo.
J'ai là la réponse à mon besoin !
nickel....
Pour Zoury : effectivement, j'utilise les API Write et
GetPrivateProfileString, mais j'étais limité à 255 caractères.. (Les
C:Documents & SettingsAdministrateur etc... font vite des chaines
importantes !!!).
Le reste des infos stockés dans mon ini sont d'une banalité déconcertante
(True / false la plupart du temps.. ce qui correspond aux choix de
configuration), et ça m'ennuyait un peu de créer un nouveau fichier juste
pour cela...
L'astuce du "buffer extensible" me convient tout à fait.
Juste une dernière question (c'est vraiment histoire d'être
: Y a t-il une limite de taille (raisonnable.. si c'est 2.10^25
c'est bon...) à cette chaine ? (quoique.. je peux faire une petite routine
qui teste cela...) ?
Merci encore !
----------------------------
Pmp
Enlevez le ANTIPUB en cas de Reply-to
(Saleté de SPAM !!!)
----------------------------
"François Picalausa" a écrit dans le message de
O9#
> Bonjour/soir,
>
> "Zoury" a écrit dans le message de
> news:
> > Private Function GetPrivateProfileString _
> > ( _
> > ByRef sSection As String, _
> > ByRef sKey As String, _
> > ByRef sDefault As String, _
> > ByRef sFileName As String _
> > ) As String
> > GetPrivateProfileString = String$(255, Chr$(0))
> > Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> > GetPrivateProfileString, 255, sFileName)
> > End Function
>
> Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors
la
> relecture...
> Mais pour 30 ou 40, il y a peut-être un petit problème...
> Des chemins comme ceux que tu as données représentent à peu près 10
> caractères en moyenne.
> 10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
>
> Voici un bout de code permettant de ne pas être limité aux 255
> 'Dans un module
> Private Declare Function GetPrivateProfileString _
> Lib "kernel32" _
> Alias "GetPrivateProfileStringA" _
> ( _
> ByVal lpApplicationName As String, _
> ByVal lpKeyName As String, _
> ByVal lpDefault As String, _
> ByVal lpReturnedString As String, _
> ByVal nSize As Long, _
> ByVal lpFileName As String _
> ) _
> As Long
>
> Public Function GetIniEntry _
> ( _
> FileName As String, _
> Section As String, _
> Key As String, _
> Optional DefaultValue As String = "" _
> ) _
> As String
>
> Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
>
> bContinue = True
> buffersize = 255
>
> Do While bContinue
> GetIniEntry = String$(buffersize, vbNullChar)
> ReturnCode = GetPrivateProfileString( _
> Section, _
> Key, _
> DefaultValue, _
> GetIniEntry, _
> buffersize, _
> FileName _
> )
>
> 'The return value is the number of characters copied to the
buffer,
> ' not including the terminating null character.
> '
> 'If neither lpAppName nor lpKeyName is NULL
> ' and the supplied destination buffer is too small
> ' to hold the requested string, the string is truncated
> ' and followed by a null character,
> ' and the return value is equal to nSize minus one.
>
> If ReturnCode = buffersize - 1 _
> And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop
>
> buffersize = buffersize + 255 'incrémente par pas de 255
> Else
> GetIniEntry = Left$(GetIniEntry, ReturnCode)
> bContinue = False
> End If
> Loop
> End Function
>
>
> --
> François Picalausa (MVP VB)
> FAQ VB : http://faq.vb.free.fr
> MSDN : http://msdn.microsoft.com
>
>
Je n'aurais qu'un mot à dire : Merci et bravo.
J'ai là la réponse à mon besoin !
nickel....
Pour Zoury : effectivement, j'utilise les API Write et
GetPrivateProfileString, mais j'étais limité à 255 caractères.. (Les
C:Documents & SettingsAdministrateur etc... font vite des chaines
importantes !!!).
Le reste des infos stockés dans mon ini sont d'une banalité déconcertante
(True / false la plupart du temps.. ce qui correspond aux choix de
configuration), et ça m'ennuyait un peu de créer un nouveau fichier juste
pour cela...
L'astuce du "buffer extensible" me convient tout à fait.
Juste une dernière question (c'est vraiment histoire d'être
: Y a t-il une limite de taille (raisonnable.. si c'est 2.10^25
c'est bon...) à cette chaine ? (quoique.. je peux faire une petite routine
qui teste cela...) ?
Merci encore !
----------------------------
Pmp
PmNews@plet.org
Enlevez le ANTIPUB en cas de Reply-to
(Saleté de SPAM !!!)
----------------------------
"François Picalausa" <fpicalausa@chez.com> a écrit dans le message de
O9#hX6xcDHA.4020@tk2msftngp13.phx.gbl...
> Bonjour/soir,
>
> "Zoury" <yanick_lefebvre@hotmail.com> a écrit dans le message de
> news:em4RwvxcDHA.1880@TK2MSFTNGP10.phx.gbl...
> > Private Function GetPrivateProfileString _
> > ( _
> > ByRef sSection As String, _
> > ByRef sKey As String, _
> > ByRef sDefault As String, _
> > ByRef sFileName As String _
> > ) As String
> > GetPrivateProfileString = String$(255, Chr$(0))
> > Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> > GetPrivateProfileString, 255, sFileName)
> > End Function
>
> Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors
la
> relecture...
> Mais pour 30 ou 40, il y a peut-être un petit problème...
> Des chemins comme ceux que tu as données représentent à peu près 10
> caractères en moyenne.
> 10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
>
> Voici un bout de code permettant de ne pas être limité aux 255
> 'Dans un module
> Private Declare Function GetPrivateProfileString _
> Lib "kernel32" _
> Alias "GetPrivateProfileStringA" _
> ( _
> ByVal lpApplicationName As String, _
> ByVal lpKeyName As String, _
> ByVal lpDefault As String, _
> ByVal lpReturnedString As String, _
> ByVal nSize As Long, _
> ByVal lpFileName As String _
> ) _
> As Long
>
> Public Function GetIniEntry _
> ( _
> FileName As String, _
> Section As String, _
> Key As String, _
> Optional DefaultValue As String = "" _
> ) _
> As String
>
> Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
>
> bContinue = True
> buffersize = 255
>
> Do While bContinue
> GetIniEntry = String$(buffersize, vbNullChar)
> ReturnCode = GetPrivateProfileString( _
> Section, _
> Key, _
> DefaultValue, _
> GetIniEntry, _
> buffersize, _
> FileName _
> )
>
> 'The return value is the number of characters copied to the
buffer,
> ' not including the terminating null character.
> '
> 'If neither lpAppName nor lpKeyName is NULL
> ' and the supplied destination buffer is too small
> ' to hold the requested string, the string is truncated
> ' and followed by a null character,
> ' and the return value is equal to nSize minus one.
>
> If ReturnCode = buffersize - 1 _
> And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop
>
> buffersize = buffersize + 255 'incrémente par pas de 255
> Else
> GetIniEntry = Left$(GetIniEntry, ReturnCode)
> bContinue = False
> End If
> Loop
> End Function
>
>
> --
> François Picalausa (MVP VB)
> FAQ VB : http://faq.vb.free.fr
> MSDN : http://msdn.microsoft.com
>
>
Je n'aurais qu'un mot à dire : Merci et bravo.
J'ai là la réponse à mon besoin !
nickel....
Pour Zoury : effectivement, j'utilise les API Write et
GetPrivateProfileString, mais j'étais limité à 255 caractères.. (Les
C:Documents & SettingsAdministrateur etc... font vite des chaines
importantes !!!).
Le reste des infos stockés dans mon ini sont d'une banalité déconcertante
(True / false la plupart du temps.. ce qui correspond aux choix de
configuration), et ça m'ennuyait un peu de créer un nouveau fichier juste
pour cela...
L'astuce du "buffer extensible" me convient tout à fait.
Juste une dernière question (c'est vraiment histoire d'être
: Y a t-il une limite de taille (raisonnable.. si c'est 2.10^25
c'est bon...) à cette chaine ? (quoique.. je peux faire une petite routine
qui teste cela...) ?
Merci encore !
----------------------------
Pmp
Enlevez le ANTIPUB en cas de Reply-to
(Saleté de SPAM !!!)
----------------------------
"François Picalausa" a écrit dans le message de
O9#
> Bonjour/soir,
>
> "Zoury" a écrit dans le message de
> news:
> > Private Function GetPrivateProfileString _
> > ( _
> > ByRef sSection As String, _
> > ByRef sKey As String, _
> > ByRef sDefault As String, _
> > ByRef sFileName As String _
> > ) As String
> > GetPrivateProfileString = String$(255, Chr$(0))
> > Call GetPrivateProfileStringA(sSection, sKey, sDefault,
> > GetPrivateProfileString, 255, sFileName)
> > End Function
>
> Pour tes 5 fichiers, les 255 caractères ne sont pas vite atteints lors
la
> relecture...
> Mais pour 30 ou 40, il y a peut-être un petit problème...
> Des chemins comme ceux que tu as données représentent à peu près 10
> caractères en moyenne.
> 10*30 = 300... 5 en trop si on ne compte pas les séparateurs ;-)
>
> Voici un bout de code permettant de ne pas être limité aux 255
> 'Dans un module
> Private Declare Function GetPrivateProfileString _
> Lib "kernel32" _
> Alias "GetPrivateProfileStringA" _
> ( _
> ByVal lpApplicationName As String, _
> ByVal lpKeyName As String, _
> ByVal lpDefault As String, _
> ByVal lpReturnedString As String, _
> ByVal nSize As Long, _
> ByVal lpFileName As String _
> ) _
> As Long
>
> Public Function GetIniEntry _
> ( _
> FileName As String, _
> Section As String, _
> Key As String, _
> Optional DefaultValue As String = "" _
> ) _
> As String
>
> Dim ReturnCode As Long, bContinue As Boolean, buffersize As Long
>
> bContinue = True
> buffersize = 255
>
> Do While bContinue
> GetIniEntry = String$(buffersize, vbNullChar)
> ReturnCode = GetPrivateProfileString( _
> Section, _
> Key, _
> DefaultValue, _
> GetIniEntry, _
> buffersize, _
> FileName _
> )
>
> 'The return value is the number of characters copied to the
buffer,
> ' not including the terminating null character.
> '
> 'If neither lpAppName nor lpKeyName is NULL
> ' and the supplied destination buffer is too small
> ' to hold the requested string, the string is truncated
> ' and followed by a null character,
> ' and the return value is equal to nSize minus one.
>
> If ReturnCode = buffersize - 1 _
> And Right(GetIniEntry, 1) = vbNullChar Then 'buffer trop
>
> buffersize = buffersize + 255 'incrémente par pas de 255
> Else
> GetIniEntry = Left$(GetIniEntry, ReturnCode)
> bContinue = False
> End If
> Loop
> End Function
>
>
> --
> François Picalausa (MVP VB)
> FAQ VB : http://faq.vb.free.fr
> MSDN : http://msdn.microsoft.com
>
>
On pourrait également sotckée la longueur totale dans une autre clé. :OP
Tiens c'est vrai! :O)
On pourrait également sotckée la longueur totale dans une autre clé. :OP
On pourrait également sotckée la longueur totale dans une autre clé. :OP
Tiens c'est vrai! :O)
On pourrait également sotckée la longueur totale dans une autre clé. :OP
On pourrait également sotckée la longueur totale dans une autre clé. :OP
Tiens c'est vrai! :O)
On pourrait également sotckée la longueur totale dans une autre clé. :OP
> C'est aussi un fait.
dans ce cas-ci il le logiciel est pour lui, alors s'il y a des problèmes
saura qui en est la cause.. :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Merci de poster les réponses au groupe afin d'en faire profiter à tous
> C'est aussi un fait.
dans ce cas-ci il le logiciel est pour lui, alors s'il y a des problèmes
saura qui en est la cause.. :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Merci de poster les réponses au groupe afin d'en faire profiter à tous
> C'est aussi un fait.
dans ce cas-ci il le logiciel est pour lui, alors s'il y a des problèmes
saura qui en est la cause.. :O)
--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Merci de poster les réponses au groupe afin d'en faire profiter à tous
Bonjour/soir,
> On pourrait également sotckée la longueur totale dans une autre clé. :OP
Selon le principe qu'il ne faut jamais faire confiance à une entrée
utilisateur et sachant que l'utilisateur peut éditer le fichier ini, je
dirais que non, on ne peut pas...
Mais tout dépend du fait qu'on puisse avoir confiance en les utilisateurs
du fait que les utilisateurs soient prévenus... (ici, pour un groupe
restreint d'uilisateurs, ça pourrait aller)
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
"Zoury" a écrit dans le message de
news:
> Tiens c'est vrai! :O)
>
> On pourrait également sotckée la longueur totale dans une autre clé. :OP
Bonjour/soir,
> On pourrait également sotckée la longueur totale dans une autre clé. :OP
Selon le principe qu'il ne faut jamais faire confiance à une entrée
utilisateur et sachant que l'utilisateur peut éditer le fichier ini, je
dirais que non, on ne peut pas...
Mais tout dépend du fait qu'on puisse avoir confiance en les utilisateurs
du fait que les utilisateurs soient prévenus... (ici, pour un groupe
restreint d'uilisateurs, ça pourrait aller)
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
"Zoury" <yanick_lefebvre@hotmail.com> a écrit dans le message de
news:OB1OQRycDHA.656@tk2msftngp13.phx.gbl...
> Tiens c'est vrai! :O)
>
> On pourrait également sotckée la longueur totale dans une autre clé. :OP
Bonjour/soir,
> On pourrait également sotckée la longueur totale dans une autre clé. :OP
Selon le principe qu'il ne faut jamais faire confiance à une entrée
utilisateur et sachant que l'utilisateur peut éditer le fichier ini, je
dirais que non, on ne peut pas...
Mais tout dépend du fait qu'on puisse avoir confiance en les utilisateurs
du fait que les utilisateurs soient prévenus... (ici, pour un groupe
restreint d'uilisateurs, ça pourrait aller)
--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
"Zoury" a écrit dans le message de
news:
> Tiens c'est vrai! :O)
>
> On pourrait également sotckée la longueur totale dans une autre clé. :OP