OVH Cloud OVH Cloud

créer et détruire des fichiers

28 réponses
Avatar
thierry
Bonjour,

lorsque l'on programme en C , on peut créer des fichiers , effacer ce qu'il
y dedans etc.
Par contre, je n'arrive pas à faire la même chose en VB6.
Pourriez vous m'indiquer comment créer un fichier, effacer l'intégralité
d'un fichier, et détruire un fichier!!!

rien que ça.

Merci par avance

Cordialement

Thierry

10 réponses

1 2 3
Avatar
jp
NFile = Freefile '
open "c:Fichier.txt" for output as #NFile
close #NFile

A+



"thierry" a écrit dans le message de
news:bu3qkn$eor$
Bonjour,

lorsque l'on programme en C , on peut créer des fichiers , effacer ce


qu'il
y dedans etc.
Par contre, je n'arrive pas à faire la même chose en VB6.
Pourriez vous m'indiquer comment créer un fichier, effacer l'intégralité
d'un fichier, et détruire un fichier!!!

rien que ça.

Merci par avance

Cordialement

Thierry




Avatar
jp
Pour detruire tu dois verifier son existance puis le supprimer

if len(dir("c:fichier.txt")) > 0 then kill "c:fichier.txt"


A+

"thierry" a écrit dans le message de
news:bu3qkn$eor$
Bonjour,

lorsque l'on programme en C , on peut créer des fichiers , effacer ce


qu'il
y dedans etc.
Par contre, je n'arrive pas à faire la même chose en VB6.
Pourriez vous m'indiquer comment créer un fichier, effacer l'intégralité
d'un fichier, et détruire un fichier!!!

rien que ça.

Merci par avance

Cordialement

Thierry




Avatar
ng
Salut,

Dim k as integer, sBuff as String

'Vide le fichier ou le crée s'il n'existe pas déjà

k = freefile 'pointeur libre pour ouvrir le fichier
Open "c:1.txt" for output as #k
close #k

'Vide et inscrit une chaine

k = freefile
Open "c:1.txt" for output as #k
Print #, "Test"
close #k

'Ajoute une chaine à la suite

k = freefile
Open "c:1.txt" for Append as #k
Print #, "Test 2"
close #k

'lit le fichier

k = freefile
Open "c:1.txt" for Binary as #k
sBuff = Space$(LOF(k)) 'redim le buffer
Get #k,,sBuff
close #k

Debug.Print "Contenu du fichier : " & sBuff


--
Nicolas.
http://www.ngsoft-fr.com
"thierry" a écrit dans le message de news:
bu3qkn$eor$
Bonjour,

lorsque l'on programme en C , on peut créer des fichiers , effacer ce


qu'il
y dedans etc.
Par contre, je n'arrive pas à faire la même chose en VB6.
Pourriez vous m'indiquer comment créer un fichier, effacer l'intégralité
d'un fichier, et détruire un fichier!!!

rien que ça.

Merci par avance

Cordialement

Thierry




Avatar
Zoury
Salut JP! :O)

Pour detruire tu dois verifier son existance puis le supprimer

if len(dir("c:fichier.txt")) > 0 then kill "c:fichier.txt"




La fonction Dir$ n'est pas trop conseillée pour vérifiier l'existence d'un
fichier et ce pour au moins 2 raisons :

1. La fonction Dir ne peut être appelée de manière "imbriquée". En effet,
derrière la scène, la fonction Dir$ utilise en fait les APIs
FindFirstFile(), FindNextFile() et FindClose() et ne conserve qu'un seul
handle de fichier à la fois... Lorsque tu appelles la fonction en lui
passant un paramètre, VB appel la fonction FindFirstFile() et obtient un
handle de fichier qu'il conserve en mémoire. Lorsque qu'on rappelle Dir$
sans paramètre, VB appel la fonction FindNextFile() sur le handle trouvé
précédement. Ce handle reste en mémoire jusqu'à la fermeture du logiciel où
FindClose() (ce qui libére le handle) ou encore jusqu'à ce que Dir soit
appelé de nouveau avec un autre paramètre dans ce cas FindClose() est appelé
suivit de FindFirstFile() pour en obtenir un nouveau. Ce problème rend donc
le code de vérification beaucoup moins portable...

2. La méthode suivante, qui consiste à capter l'erreur, est 2 fois plus
rapide que l'autre... :O))

'***
Function FileExists(ByRef sFileName As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function
'***


Note : Pour connaître la différence entre Dir et Dir$, Left et Left$, etc.,
lit le message suivant :
http://groups.google.com/groups?threadm=uxkJ7fJ1DHA.2180%40TK2MSFTNGP12.phx.gbl

--
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
Avatar
Zoury
Salut Thierry! :O)

Pourriez vous m'indiquer comment créer un fichier



d'autres t'ont déjà répondu à ce sujet..


effacer l'intégralité d'un fichier



Tu parles de son contenu? Le plus simple serait de supprimer le fichier en
question est d'en recréer un vide.. sauf que tu perderas les informations de
création du fichier original.. pour les conserver, tu peux utiliser les APIs
GetFileTime() et SetFileTime().. Il y a des exemples sur groups.google.com,
demande le si tu as besoin d'aide ou d'un exemple plus concret.


et détruire un fichier!!!



Utilise la méthode Kill().


Tu seras peut-être intéressé par la classe CFile qui est disponible ici :
http://groups.google.com/groups?selm=uKyYolctDHA.2464%40TK2MSFTNGP12.phx.gbl

--
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
Avatar
Thierry M.
Zoury <yanick_lefebvre at hotmail dot com> écrivait:

La fonction Dir$ n'est pas trop conseillée pour vérifiier l'existence d'un
fichier



avec le nom du fichier et non un len() > 0 je ne vois pas trop le bleme !

Function FileExists(ByRef sFileName As String) As Boolean



pourquoi faire simple (fonctions VB) quand on peut faire compliqué (API) ?

quand au 2 fois plus rapide, quelle preuve ?
et quelle utilitée ? a moins d'en être à la nanoseconde pres
si c'est réellement plus rapide ...

et à ce compte, tout est programmable en API, donc
à la limite quel intéret à VB ?

--
Thierry MARTIN
Forums Réunion (dont parapente)
http://ardf.free.fr/forums/
Avatar
François Picalausa
Bonjour/soir,

Function FileExists(ByRef sFileName As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function





pourquoi faire simple (fonctions VB) quand on peut faire compliqué
(API) ?



Dis nous où tu vois une seule API dans tout ça? mis à part celles utilisées
en interne par VB... mais il y en a quand même dans Dir ;-)
Zoury expliquait juste comment procéder par API...

quand au 2 fois plus rapide, quelle preuve ?



hmm... http://www.mvps.org/vb/tips/benchmarks.htm

et quelle utilitée ? a moins d'en être à la nanoseconde pres
si c'est réellement plus rapide ...



Suppose que tu doive tester si 2000 fichiers existent (parce que par
exemple, tu as des fichiers de rapport ayant chacun une date et que tu veux
savoir à quelles dates aucun rapport n'a été généré), tu préférera attendre
20 secondes ou une demi seconde? L'exemple est volontairement exagéré mais
c'est pour illustrer que si possible, surtout si pas plus compliqué, autant
utiliser une méthode plus rapide!

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


"Thierry M." a écrit dans le message de
news:
Zoury <yanick_lefebvre at hotmail dot com> écrivait:

La fonction Dir$ n'est pas trop conseillée pour vérifiier
l'existence d'un fichier



avec le nom du fichier et non un len() > 0 je ne vois pas trop le
bleme !

Function FileExists(ByRef sFileName As String) As Boolean



pourquoi faire simple (fonctions VB) quand on peut faire compliqué
(API) ?

quand au 2 fois plus rapide, quelle preuve ?
et quelle utilitée ? a moins d'en être à la nanoseconde pres
si c'est réellement plus rapide ...

et à ce compte, tout est programmable en API, donc
à la limite quel intéret à VB ?


Avatar
ng
Salut,

Je te conseille d'utiliser Dir$() uniquement pour lister un répertoire, pour
vérifier l'existence d'un fichier utilise la fonction de Zoury, d'ailleur
relis bien son article et tu veras où est le "blème" :-)

--
Nicolas.
http://www.ngsoft-fr.com
"Thierry M." a écrit dans le message de news:

Zoury <yanick_lefebvre at hotmail dot com> écrivait:

> La fonction Dir$ n'est pas trop conseillée pour vérifiier l'existence


d'un
> fichier

avec le nom du fichier et non un len() > 0 je ne vois pas trop le bleme !

> Function FileExists(ByRef sFileName As String) As Boolean

pourquoi faire simple (fonctions VB) quand on peut faire compliqué (API) ?

quand au 2 fois plus rapide, quelle preuve ?
et quelle utilitée ? a moins d'en être à la nanoseconde pres
si c'est réellement plus rapide ...

et à ce compte, tout est programmable en API, donc
à la limite quel intéret à VB ?

--
Thierry MARTIN
Forums Réunion (dont parapente)
http://ardf.free.fr/forums/



Avatar
Zoury
Salut! :O)

> La fonction Dir$ n'est pas trop conseillée pour vérifiier l'existence


d'un
> fichier

avec le nom du fichier et non un len() > 0 je ne vois pas trop le bleme !



Quoi?!


> Function FileExists(ByRef sFileName As String) As Boolean

pourquoi faire simple (fonctions VB) quand on peut faire compliqué (API) ?



... Quoi?!


quand au 2 fois plus rapide, quelle preuve ?



Essai ce test :

La classe CStopWatch est disponible à cette adresse :
http://www.mvps.org/vb/samples.htm

'***
' Module1
Option Explicit

Private Sub Main()

Dim tLoop As Long
Dim tAvecFichierAvecErr As Long
Dim tAvecFichierSansErr As Long
Dim tSansFichierAvecErr As Long
Dim tSansFichierSansErr As Long
Dim sw As CStopWatch
Dim i As Long
Const CONST_LOOP As Long = 100000

Set sw = New CStopWatch

' Temps de la loop
sw.Reset
For i = 0 To CONST_LOOP
Next
tLoop = sw.Elapsed

' Temps avec fichier existant et
' gestion d'erreur
sw.Reset
For i = 0 To CONST_LOOP
FileExists "c:Test.txt"
Next
tAvecFichierAvecErr = sw.Elapsed

' Temps avec fichier existant sans
' gestion d'erreur
sw.Reset
For i = 0 To CONST_LOOP
FileExistsX "c:Test.txt"
Next
tAvecFichierSansErr = sw.Elapsed

' Temps sans fichier existant et
' gestion d'erreur
sw.Reset
For i = 0 To CONST_LOOP
FileExists "c:Test.txt"
Next
tSansFichierAvecErr = sw.Elapsed

' Temps sans fichier existant sans
' gestion d'erreur
sw.Reset
For i = 0 To CONST_LOOP
FileExistsX "c:Test.txt"
Next
tSansFichierSansErr = sw.Elapsed

Debug.Print "Nombre de boucles : " & CONST_LOOP
Debug.Print "Temps de la boucle : " & tLoop & " ms"
Debug.Print "Temps avec fichier avec erreur : " & tAvecFichierAvecErr -
tLoop & " ms"
Debug.Print "Temps avec fichier sans erreur : " & tAvecFichierSansErr -
tLoop & " ms"
Debug.Print "Temps sans fichier avec erreur : " & tSansFichierAvecErr -
tLoop & " ms"
Debug.Print "Temps sans fichier sans erreur : " & tSansFichierSansErr -
tLoop & " ms"

End Sub

Function FileExists(ByRef sFileName As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function

Function FileExistsX(ByVal sFileName As String) As Boolean
FileExistsX = LenB(Dir$(sFileName, vbDirectory)) <> 0
End Function
'***

' Résultats
Nombre de boucles : 10000
Temps de la boucle : 0 ms
Temps avec fichier avec erreur : 523 ms
Temps avec fichier sans erreur : 939 ms
Temps sans fichier avec erreur : 512 ms
Temps sans fichier sans erreur : 836 ms



et quelle utilitée ? a moins d'en être à la nanoseconde pres
si c'est réellement plus rapide ...



Ça dépend de tes besoins... Si la fonction est appellée à plusieurs
reprises, comme le montre le Benchmark, la différence peut rapidement
devenir notable.. Aussi, si l'optimisation d'une seule fonction ne change
souvent pas grand chose, l'addition de toutes les optimisations effectuées
peut réellement changer la vitesse d'éxecution d'une tâche.



et à ce compte, tout est programmable en API, donc
à la limite quel intéret à VB ?



Il permet d'utiliser les APIs..? :O)
Sérieusement, *beaucoup* de choses sont possibles directement depuis VB.
Toutefois les APIs aident à repousser les limites du possible et à améliorer
de la vitesse d'exécution.


--
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
Avatar
Christophe
Juste posté à vers 18 h mais par erreur trop vite "à l'expediteur "

Bien sur la classe citée plus est plus classe


Bonjour

Ci-dessous une petite classe pour gerer les fichiers sur le disque(ça répond
à une partie de ta question), pour le reste creer ecrire je crois que tu as
dèjà des réponses

Christophe Vergon

dans une form tu ecris

dim F as nomfichier
set F= new nomfichier
F.chemin="C:" 'le chemin d'accès avec ou sans à la fin
F.nom= Monfichier ' nom du fichier
F.extention= "exe" ' extention du fichier

If f.existe then
.........
end if

set F=nothing

Le code de la classe est ci-dessous, de suite avant que tu te mettes Zoury à
dos évite d'utiliser FSO


'classe nomfichier
Private mchemin As String
Private mnom As String
Private mextention As String * 3

Public Property Get chemin() As String
chemin = mchemin
End Property

Public Property Let chemin(ByVal vNewValue As String)
If Mid$(vNewValue, Len(vNewValue), 1) <> "" Then
vNewValue = vNewValue & ""
End If
mchemin = vNewValue
End Property
Public Property Get nomfichier() As String
nomfichier = mnom
End Property
Public Property Let nomfichier(ByVal vNewValue As String)
mnom = vNewValue
End Property
Public Property Get extention() As String
extention = mextention
End Property

Public Property Let extention(ByVal vNewValue As String)
mextention = vNewValue
End Property

Public Function existe() As Boolean
Dim a$
a$ = Dir(mchemin & mnom & "." & mextention)
If a$ = "" Then
existe = False
Else
existe = True
End If

End Function

Public Sub renomme(NewName As String)
Name mchemin & mnom & "." & mextention As mchemin & NewName & "." &
mextention
End Sub

Public Sub deplace(newpath As String)
If Mid$(newpath, Len(newpath), 1) <> "" Then
newpath = newpath & ""
End If
Name mchemin & mnom & "." & mextention As newpath & mnom & "." & mextention
End Sub

Public Sub CopieEtRenomme(NewName As String, ext As String)

Dim oldname As String
Dim newcompletename As String

oldname = mchemin & mnom & "." & mextention
newcompletename = mchemin & NewName & "." & ext
FileCopy oldname, newcompletename

End Sub
Public Sub efface()
Dim n As String
n = mchemin & mnom & "." & mextention
Kill (n)
End Sub


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Thierry! :O)

> Pourriez vous m'indiquer comment créer un fichier

d'autres t'ont déjà répondu à ce sujet..


> effacer l'intégralité d'un fichier

Tu parles de son contenu? Le plus simple serait de supprimer le fichier en
question est d'en recréer un vide.. sauf que tu perderas les informations


de
création du fichier original.. pour les conserver, tu peux utiliser les


APIs
GetFileTime() et SetFileTime().. Il y a des exemples sur


groups.google.com,
demande le si tu as besoin d'aide ou d'un exemple plus concret.


> et détruire un fichier!!!

Utilise la méthode Kill().


Tu seras peut-être intéressé par la classe CFile qui est disponible ici :



http://groups.google.com/groups?selm=uKyYolctDHA.2464%40TK2MSFTNGP12.phx.gbl

--
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




1 2 3