WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 20.12.2001, 10:58   #1
nordbahnfredi
Inventar
 
Benutzerbild von nordbahnfredi
 
Registriert seit: 12.10.2000
Ort: Wien
Alter: 77
Beiträge: 1.963


Standard 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?
____________________________________
Schöne Grüße nordb@hnfredi
nordbahnfredi ist offline   Mit Zitat antworten
Alt 20.12.2001, 11:08   #2
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

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.

____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 20.12.2001, 11:30   #3
nordbahnfredi
Inventar
 
Benutzerbild von nordbahnfredi
 
Registriert seit: 12.10.2000
Ort: Wien
Alter: 77
Beiträge: 1.963


Standard

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.

danke für den tipp, werd mich an die arbeit machen.
____________________________________
Schöne Grüße nordb@hnfredi
nordbahnfredi ist offline   Mit Zitat antworten
Alt 21.12.2001, 02:32   #4
Sonic
Master
 
Registriert seit: 28.03.2000
Alter: 45
Beiträge: 691


Sonic eine Nachricht über ICQ schicken
Standard

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.
____________________________________
__________________
|»»»»»SONIC««««««|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Sonic ist offline   Mit Zitat antworten
Alt 21.12.2001, 17:32   #5
nordbahnfredi
Inventar
 
Benutzerbild von nordbahnfredi
 
Registriert seit: 12.10.2000
Ort: Wien
Alter: 77
Beiträge: 1.963


Standard

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.)
____________________________________
Schöne Grüße nordb@hnfredi
nordbahnfredi ist offline   Mit Zitat antworten
Alt 21.12.2001, 22:23   #6
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

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
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 21.12.2001, 22:44   #7
nordbahnfredi
Inventar
 
Benutzerbild von nordbahnfredi
 
Registriert seit: 12.10.2000
Ort: Wien
Alter: 77
Beiträge: 1.963


Standard

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?
____________________________________
Schöne Grüße nordb@hnfredi
nordbahnfredi ist offline   Mit Zitat antworten
Alt 21.12.2001, 23:29   #8
Sonic
Master
 
Registriert seit: 28.03.2000
Alter: 45
Beiträge: 691


Sonic eine Nachricht über ICQ schicken
Standard

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
____________________________________
__________________
|»»»»»SONIC««««««|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Sonic ist offline   Mit Zitat antworten
Alt 21.12.2001, 23:52   #9
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

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
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 22.12.2001, 00:05   #10
nordbahnfredi
Inventar
 
Benutzerbild von nordbahnfredi
 
Registriert seit: 12.10.2000
Ort: Wien
Alter: 77
Beiträge: 1.963


Standard

vorerst vielen dank euch beiden,

werde mich in die materie vertiefen.
____________________________________
Schöne Grüße nordb@hnfredi
nordbahnfredi ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:36 Uhr.


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