OVH Cloud OVH Cloud

Copie fichiers + append

4 réponses
Avatar
Gérard
Je cherche =E0 effectuer en vb une copie d'un
fichier vers une destination et si cette destination
existe effectuer un APPEND si elle n'existe pas=20
la cr=E9er.

4 réponses

Avatar
Zoury
Salut Gérard!

Regarde un peu les fonctionnalités de ma classe CFile...

tu peux copier la dernière version d'ici :
http://groups.google.com/groups?selm=%23IHm9FnjDHA.1072%40TK2MSFTNGP09.phx.gbl

En fouillant sur google tu trouveras des exemples d'utilisation (la syntaxe
de certain exemple peut avoir changer..)
http://groups.google.com/groups?as_qÏIle&ie=UTF-8&oe=UTF-8&as_ugroup=*.vb.*&as_uauthors=Zoury&as_scoring=d&lr=&num0&hl=fr


le code ressemblerait à ceci :

<non testé>
'***
' Module1
Option Explicit

Private Sub Main()

Dim f As CFile
Set f = New CFile

' Si existe, on "append" le texte
If (FileExists("c:un_dossierdestination.txt")) Then
Call f.OpenFile("c:un_dossierdestination.txt")
Call f.AppendFile("c:source.txt")
' Sinon, on copie au nouvel endroit et suprime l'ancien
Else
Call f.OpenFile("c:source.txt")
Call f.SaveAs("c:un_dossierdestination.txt")
Call Kill("c:source.txt")
End If

End Sub

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

--
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
"Gérard" wrote in message
news:05d301c39c79$54d27380$
Je cherche à effectuer en vb une copie d'un
fichier vers une destination et si cette destination
existe effectuer un APPEND si elle n'existe pas
la créer.
Avatar
Gérard
Salut Yanick

Merci pour ta réponse, je ne suis pas du tout un
spécialiste vb, et ne comprends donc pas grand chose à ton
pgm, navré, je serais bien incapable de le debugger en cas
de pbs je vais donc procéder autrement. Encore une fois
merci.
-----Message d'origine-----
Salut Gérard!

Regarde un peu les fonctionnalités de ma classe CFile...

tu peux copier la dernière version d'ici :
http://groups.google.com/groups?selm=%23IHm9FnjDHA.1072%


40TK2MSFTNGP09.phx.gbl

En fouillant sur google tu trouveras des exemples


d'utilisation (la syntaxe
de certain exemple peut avoir changer..)
http://groups.google.com/groups?as_qÏIle&ie=UTF-


8&oe=UTF-
8&as_ugroup=*.vb.*&as_uauthors=Zoury&as_scoring=d&lr=&num=1
00&hl=fr


le code ressemblerait à ceci :

<non testé>
'***
' Module1
Option Explicit

Private Sub Main()

Dim f As CFile
Set f = New CFile

' Si existe, on "append" le texte
If (FileExists("c:un_dossierdestination.txt")) Then
Call f.OpenFile("c:un_dossierdestination.txt")
Call f.AppendFile("c:source.txt")
' Sinon, on copie au nouvel endroit et suprime


l'ancien
Else
Call f.OpenFile("c:source.txt")
Call f.SaveAs("c:un_dossierdestination.txt")
Call Kill("c:source.txt")
End If

End Sub

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = ((GetAttr(sFile) And vbDirectory) = 0)
End Function
'***

--
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
"Gérard" wrote in message
news:05d301c39c79$54d27380$
Je cherche à effectuer en vb une copie d'un
fichier vers une destination et si cette destination
existe effectuer un APPEND si elle n'existe pas
la créer.


.



Avatar
Zoury
Salut Gérard! :O)

Il suffit de prendre les choses une à la fois... ;O)

Pour l'instant tu n'as pas besoin de comprendre le code de la classe. Mais
il suffirait de lire attentivement et peut-être même de l'exécuter en pas à
pas pour comprendre le fonctionnement qui est très simple.



Voici un exemple *fonctionnel*.
Je vais te posté le projet dans le message qui suivivra afin que tu puisses
t'y démêler un p'tit peu.

____________________________
Contenu des fichiers en entrées :

source.txt :
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5

destination1.txt :
Ligne 6
Ligne 7
Ligne 8
Ligne 9
Ligne 10
____________________________
Code :

'***
' Module1
Option Explicit

Private Sub Main()
Call CopyFile("c:source.txt", "c:destination1.txt")
Call CopyFile("c:source.txt", "c:destination2.txt")
End Sub

Private Sub CopyFile(ByRef sSource As String, ByRef sDestination As String)

Dim f As CFile
Set f = New CFile

' On vérifie si le fichier destination
' existe déjà sur le disque.
If (FileExists(sDestination)) Then

' Si la réponse est oui, on
' colle le contenu du fichier
' source à la suite du fichier
' de destination (append)

' Ouvre le contenu du fichier
' destination
Call f.OpenFile(sDestination)

' Colle le contenu du fichier
' source à la suite du fichier
' destination
' Mais avant il faut ajouter un
' saut de ligne.
Call f.AppendLine("")
Call f.AppendFile(sSource)

' On sauvegarde le résultat
Call f.SaveFile

Else

' Si la réponse est non, on
' n'a qu'à copier
' le fichier source à la
' nouvelle destination

' Ouvre le fichier source
Call f.OpenFile(sSource)

' Copie le fichier à son
' nouvel emplacement
Call f.SaveFileAs(sDestination)

End If

End Sub

' Renvoi True si le fichier passé en paramètre existe
Private Function FileExists(ByRef sFile As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFile) And vbDirectory) = 0)
End Function
'***

'***
' Classe CFile, dernière version pour les intéressés
Option Explicit

Private m_sLignes() As String ' Contient les lignes du fichier
Private Const BUFFER_SIZE As Long = 500 ' Taille du buffer
Private m_lIndex As Long ' Index actuel
Private m_sFile As String ' Nom du fichier

'**************************************
' Renvoi la ligne demandée
'**************************************
Public Property Get Lines(ByRef lNumLine As Long) As String
If lNumLine > 0 And lNumLine <= (UBound(m_sLignes) + 1) Then
Lines = m_sLignes(lNumLine - 1)
End If
End Property

'**************************************
' Modifie la ligne demandée
'**************************************
Public Property Let Lines _
( _
ByRef lNumLine As Long, _
ByRef sLine As String _
)
If lNumLine > 0 And lNumLine <= (UBound(m_sLignes) + 1) Then
m_sLignes(lNumLine - 1) = sLine
End If
End Property

'**************************************
' Ajoute une ligne
'**************************************
Public Function AppendLine(ByRef sLine As String) As String

m_lIndex = m_lIndex + 1
If Not (m_lIndex <= UBound(m_sLignes)) Then
ReDim Preserve m_sLignes(UBound(m_sLignes) + BUFFER_SIZE) As String
End If
m_sLignes(m_lIndex) = sLine

End Function

'**************************************
' Ajoute du texte
'**************************************
Public Function Append(ByRef sText As String) As String

Dim s() As String
Dim i As Long

s = Split(sText, vbNewLine)

If m_lIndex = -1 Then
m_lIndex = m_lIndex + 1
If Not (m_lIndex <= UBound(m_sLignes)) Then
ReDim Preserve m_sLignes(UBound(m_sLignes) + BUFFER_SIZE) As
String
End If
End If
m_sLignes(m_lIndex) = m_sLignes(m_lIndex) & s(0)
For i = 1 To UBound(s)
Call AppendLine(s(i))
Next i

End Function

'**************************************
' Renvoi le texte en entier
'**************************************
Public Property Get Text() As String
If (m_lIndex > -1) Then
Dim s() As String
s = m_sLignes
ReDim Preserve s(m_lIndex) As String
Text = Join(s, vbNewLine)
End If
End Property

'**************************************
' Renvoi le nombre du ligne contenu
' dans le fichier
'**************************************
Public Property Get LineCount() As Long
LineCount = m_lIndex + 1
End Property

'**************************************
' Lit le fichier et le stock dans
' notre tableau
'**************************************
Public Function OpenFile(ByRef sFile As String) As String

OpenFile = GetFileContent(sFile)
If LenB(OpenFile) <> 0 Then
m_sFile = sFile
m_sLignes = Split(OpenFile, vbNewLine)
m_lIndex = UBound(m_sLignes)
End If

End Function

'*****************************
' Lit et renvoi le contenu du
' fichier sFile
'*****************************
Private Function GetFileContent(ByRef sFile As String) As String

Dim hFile As Integer ' Handle du fichier
Dim sText As String ' Contenu du fichier

' Sort le fichier n'existe pas...
If Not FileExists(sFile) Then
Err.Raise 53
Exit Function
End If

hFile = FreeFile
Open sFile For Binary As #hFile
sText = Space$(LOF(hFile))
Get #hFile, , sText
Close #hFile

GetFileContent = sText

End Function


'**************************************
' Écrit un nouveau fichier
'**************************************
Public Sub SaveFileAs(ByRef sFile As String)

Dim hFile As Integer ' Handle du fichier
Dim sText As String ' Contenu du fichier

m_sFile = sFile

If FileExists(sFile) Then
Kill sFile
End If

' Réduit le tableau et obtient le texte
If m_lIndex > -1 Then
ReDim Preserve m_sLignes(m_lIndex) As String
sText = Join(m_sLignes, vbNewLine)
End If

hFile = FreeFile
Open sFile For Binary As #hFile
Put #hFile, , sText
Close #hFile

End Sub

'**************************************
' Écrit le fichier
'**************************************
Public Sub SaveFile()

Dim hFile As Integer ' Handle du fichier
Dim sText As String ' Contenu du fichier

' Sort si aucun nom de fichier n'est spéficier
If LenB(m_sFile) = 0 Then
Exit Sub
End If

' Réduit le tableau et obtient le texte
If m_lIndex > -1 Then
ReDim Preserve m_sLignes(m_lIndex) As String
sText = Join(m_sLignes, vbNewLine)
End If

hFile = FreeFile
Open m_sFile For Binary As #hFile
Put #hFile, , sText
Close #hFile

End Sub

'**************************************
' Initialise le tableau de String
'**************************************
Private Sub Class_Initialize()
m_sLignes = Split("", " ")
m_lIndex = -1
End Sub

'**************************************
' Vérifie si le fichier existe
'**************************************
Private Function FileExists(ByRef sFile As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFile) And vbDirectory) = 0)
End Function

'**************************************
' Ajoute le contenu du fichier sFile
' à la suite du texte et renvoi le
' texte du fichier ajouté
'**************************************
Public Function AppendFile(ByRef sFile As String) As String

AppendFile = GetFileContent(sFile)
If LenB(AppendFile) <> 0 Then
Call Append(AppendFile)
End If

End Function

'**************************************
' Remplace la chaine cherchée par
' la nouvelle
'**************************************
Public Sub ReplaceText _
( _
ByRef sFind As String, _
ByRef sReplace As String, _
Optional ByRef lStart As Long = 1, _
Optional ByRef lCount As Long = -1, _
Optional ByRef cm As VbCompareMethod = vbBinaryCompare _
)

m_sLignes = Split(Replace(Text, sFind, sReplace, lStart, lCount, cm),
vbNewLine)
m_lIndex = UBound(m_sLignes)

End Sub

'**************************************
' Renvoi la position de la première
' occurance de sFind trouvée dans
' le texte
'**************************************
Public Function IndexOf _
( _
ByRef sFind As String, _
Optional ByRef lStart As Long = 1, _
Optional ByRef cm As VbCompareMethod = vbBinaryCompare _
) As Long
IndexOf = InStr(lStart, Text, sFind, cm)
End Function

'**************************************
' Renvoi la position de la dernière
' occurance de sFind trouvée dans
' le texte
'**************************************
Public Function LastIndexOf _
( _
ByRef sFind As String, _
Optional ByRef lStart As Long = 1, _
Optional ByRef cm As VbCompareMethod = vbBinaryCompare _
) As Long
LastIndexOf = InStrRev(Text, sFind, lStart, cm)
End Function
'***
____________________________
Résultats :

source.txt :
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5

destination1.txt :
Ligne 6
Ligne 7
Ligne 8
Ligne 9
Ligne 10
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5

destination2.txt
Ligne 1
Ligne 2
Ligne 3
Ligne 4
Ligne 5

--
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
> Comment on fait du pas pas en VB ?



Regarde dans le menu "Debug" (je ne connais pas le nom en francais, j'ai la
version anglaise.. c'est juste à gauche du menu Exécuter).

Voici les touches rapidement :

F8 - Step Into
Exécute la ligne courrante. Si c'est une fonction, le débuggeur entre à
l'intérieur si c'est possible.

Shift-F8 - Step Over
Exécute la ligne courante. (n'entre pas à l'intérieur des fonctions)

Ctrl-Shift-F8 - Step Out
Exécute le reste de la fonction et arrête l'exécution une fois qu'on en
est sortie.

Ctrl-F8
Exécute jusqu'à la position du curseur dans le code.


Il est ou le projet ?



En attachement (pièce jointe). Tu arrives à le sauvergarder sur ton poste?
sinon j'vais te le poster par email. :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