WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Ordnerinhalte kopieren in VB5 (http://www.wcm.at/forum/showthread.php?t=40068)

nordbahnfredi 20.12.2001 10:58

Ordnerinhalte kopieren in VB5
 
Hallo VB-Spazialisten,

wer kann mir helfen? ich möchte gerne mittels VB-Programm
ganze ordner(inhalte) zum zwecke der datensicherung kopieren.

ich kann zwar files (filecopy) aber keine ordner kopieren.
kann mir jemand die syntax verraten?

Sesa_Mina 20.12.2001 11:08

ganze ordner auf einmal geht nicht.

ausser du nimmst dir ein dirinfo und ein fileinfo element und gehst diese rekursiv durch.

dann musst aber auch entsprechend verzeichnisse auf dem backup medium anlegen (error-trapping nicht vergessen a la 'on error resume next') weil sonst bekommst immer a fehlermeldung wenn a verzeichnis oder datei schon existiert.

praktischerweise gehst die beiden boxen ned nur rekursiv sondern auch in einer schleife durch womit du dann automatisch ein backup eines ordners und seiner unterordner anlegen kannst.

:cool:

nordbahnfredi 20.12.2001 11:30

Zitat:

Original geschrieben von Sesa_Mina
ganze ordner auf einmal geht nicht.

ausser du nimmst dir ein dirinfo und ein fileinfo element und gehst diese rekursiv durch.

dann musst aber auch entsprechend verzeichnisse auf dem backup medium anlegen (error-trapping nicht vergessen a la 'on error resume next') weil sonst bekommst immer a fehlermeldung wenn a verzeichnis oder datei schon existiert.

praktischerweise gehst die beiden boxen ned nur rekursiv sondern auch in einer schleife durch womit du dann automatisch ein backup eines ordners und seiner unterordner anlegen kannst.

:cool:

danke für den tipp, werd mich an die arbeit machen.

Sonic 21.12.2001 02:32

Halt!! :)

Ich hoffe du hast dir noch nicht die Arbeit angetan und hast dir eine eigene Routine zum kopieren geschrieben!
Es gibt zwar keine Funktion in VB mit der man Ordner Kopieren kann aber einen API Call.
Der ist recht simpel zu benutzen :

Code:

Option Explicit

Private Declare Function SHFileOperation Lib "shell32.dll" (lpFileOp As SHFILEOPSTRUCT) As Long

Private Type SHFILEOPSTRUCT
        hwnd As Long
        wFunc As Long
        pFrom As String
        pTo As String
        fFlags As Integer
        fAnyOperationsAborted As Long
        hNameMappings As Long
        lpszProgressTitle As String '  only used if FOF_SIMPLEPROGRESS
End Type

Private Const FO_COPY = &H2
Private Const FO_MOVE = &H1

Private Const FOF_NOCONFIRMATION = &H10
Private Const FOF_SILENT = &H4

Private Sub CMD_Durchfueren_Click()
  Dim FileOP As SHFILEOPSTRUCT
  Dim lResult As Long
 
  If EDT_Von = "" Or EDT_Nach = "" Then
    MsgBox "Sie müssen eine quelle und ein Ziel angeben!", vbOKOnly + vbCritical, "Fehler"
    Exit Sub
  End If
 
  With FileOP
    .pFrom = EDT_Von 'Text von einer Editbox was kopiert wird (opt. mit wildkats)
    .pTo = EDT_Nach 'Text von einer Editbox wohin wird kopiert.
    .wFunc = FO_COPY
    '.wFunc = FO_MOVE 'Anstatt obriger Zeile um zu verschieben und nicht zu kopieren
    '.wFunc = FOF_SILENT 'Zeigt keine Dialogbox an
    '.wFunc = FOF_NOCONFIRMATION 'Vorhandene Dateien werden ohne Nachfrage überschrieben usw..
  End With
   
  lResult = SHFileOperation(FileOP)
  If Not lResult = 0 Then
    MsgBox "Es ist ein Fehler aufgetreten", vbOKOnly + vbCritical, "FEHLER"
  End If
End Sub

Ich hab dir auch ein Beispielprogramm angehängt.
Für wFunc gibt es noch einige andere nützliche Optienen die ich die im Beispielprog auch mit einer (englischen) Bemerkung dazugeschrieben habe.

nordbahnfredi 21.12.2001 17:32

hallo sonic,

zuerst einmal danke für die infos. in welcher VB vers. ist der code?

lieber würde ich mir ein sicherungsprogramm selber schreiben. aber mein problem ist folgendes´, ich hab zwar 2 VB5 bücher, aber immer das was ich suche ist nicht drin.

z. b. wie ich in DIRINFO bzw. FILEINFO weiterdrehen kann, die Einträge abarbeiten kann, also file für file kopieren.

aber vielleicht kann ich mir deinen code indivuduell gestalten, denn ich würde gerne abhängig vom wochentag in einen entsprch. ordner sichern, aber automatisch, das heißt ich starte mein sicherungsprogramm und alles läuft automat. ab. ich sichere eh immer die gleichen ordner(eigene dateien, outlook, favoriten, etc.)

Sesa_Mina 21.12.2001 22:23

dir/fileinfo boxen..

eigenschaft listcount: Anzahl einträge
eigenschaft List(): die einzelnen Einträge


for x=0 to file1.listcount-1
debug.print file1.list(x)
next

dir1/list1.path = pfad

list1.pattern (oder ähnlich) = "*.*"

hoffe das hilft :)

nordbahnfredi 21.12.2001 22:44

hallo Sesa_Mina,

das wird mir sicher weiterhelfen.

Mir fehlt ein Buch mit vielen, praktikablen Beispielen.
Kannst du mir was diesbezügliches empfehlen-

Ich habe VB5 "Das Programmierbuch" Sybex-Verlag und
VB5 "Das Kompendium" Narkt&Technik.

Mit meinen PL1, Cobol u. Assembler-Kenntnissen vom Großrechner
komme ich da nicht weiter, weil mir die Syntax von VB5 nicht
geläufig ist. Aber wenn ich Beispiele hätte, das wär was anderes.

Programmierst du professionel in VB?

Sonic 21.12.2001 23:29

HI!

Also der Code ist von mir in VB6 geschrieben worden. Sollte aber in VB5 genauso funktionieren.
Wenn du ein Backup Programm schreiben willst, musst du meinen Beispielcode nur ein bisschen abwandeln.

in .pFrom = schreibst du zb einfach "C:\Eigene Dateien" und in .pTo den Zielordner. Dann setzt du noch .wFunc = FOF_SILENT und .wFunc = FOF_NOCONFIRMATION damit alles automatisch im hintergrund abläuft. Ohne das irgendwelche Message oder Dialogboxen kommen.

Solltest du das kopieren lieber selbst File für File machen wollen dann nimm aber bite nicht die dir/fileinfo boxen. Das sind User Interfaces und sollten nicht für eine Automatische verarbeitung herhalten müssen.

Ich würde dir eher den Befehl Dir ans Herz legen. Der liefert die ein directory listing und zwar immer einen Eintrag pro Aufruf.

Eine Kopier routine könnte so aussehen:

Code:

Private Function xcopy()
  Dim sDirEintrag As String
 
  sDirEintrag = Dir("C:\Eigene Dateien\")
  While Not sDirEintrag = ""
    FileCopy "C:\Eigene Dateien\" & sDirEintrag, "D:\BackupDir\" & sDirEintrag
    sDirEintrag = Dir()
  Wend
End Function

Das Beispiel ist natürlich sehr einfach und wenn du rekursiv alle Unterverzeichnisse durchgehen willst musst du noch einiges mehr machen.

Eine andere einfache Möglichkeit währe den Dosbefehl xcopy in einer (versteckten) Dosshell zu benutzen!

Code:

Private Function xcopy()
  Dim sXcopyShell As String
 
  sXcopyShell = "xcopy " & Chr(34) & "C:\Eigene Dateien\*.*" & Chr(34) & " /E /I /H /Y d:\Backup\"
  Shell sXcopyShell, vbHide
End Function

Mit Büchern kann ich leider nicht dienen, aber wenn englisch kein problem für dich ist hätte ich ein paar Seiten mit vielen guten Paraxis Beispielen.

http://www.vbworld.com/
http://www.programmersheaven.com/
http://www.vbcode.com/
http://www.freevbcode.com/

Ich hoffe das hilft dir etwas weiter.

lg

Sesa_Mina 21.12.2001 23:52

Visual Basic 6
Das Buch

von Evangelos Petroutsos

Sybex Verlag

ISBN: 3-8155-7018-2

Preis: damals hats noch 657.- kostet. ATS :)



sehr zu empfehlen :)

nordbahnfredi 22.12.2001 00:05

vorerst vielen dank euch beiden,

werde mich in die materie vertiefen.

martok 26.12.2001 17:14

kopiern einfach gemacht
 
Hi,
Kannst auch einfach ein "Scripting.FileSystemObject" erzeugen und mit dem dann alles mögliche machen (mehr dazu findest auf msdn.microsoft.com), is meiner Meinung nach leichter nachzuvollziehen, als sich gleich mit API-Calls herumzuschlagen...

my-2-cents
cheers
Martok


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag