vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.

Hinweis:
Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 207: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: gkwelz
 Tipp anzeigenDatum: 17.04.08 12:05

Hallo,

benutze die Funktion fCopy() mit dem Parameter TRUE für Ueberschreiben.

Leider wird dabei eine Kopie der zu kopierenden Datei (wenn vorhanden) angelegt, nicht jedoch überschrieben,

Was kann man tun?

Gruß
Gunter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: ModeratorDieter (Moderator)
Datum: 17.04.08 12:16

Setze hier mal FALSE - dann wird die Datei "normal" überschrieben.
Das ist im Tipp etwas irreführend. Bei True wird wie im Explorer eine Kopie erzeugt.

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: gkwelz
Datum: 17.04.08 13:20

Hallo Dieter,

bei FALSE kommt das Popup ob der File überschrieben werden soll. Das möchte ich jedoch nicht haben.

Gruß
Gunter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: ModeratorDieter (Moderator)
Datum: 17.04.08 14:46

Jepp - dann muss der Code wie folgt geändert werden:
Public Function fCopy(Source As String, Dest As String, _
  Ueberschreiben As Boolean) As Long
 
  ' Ueberschreiben: True, wenn ohne Warnung überschrieben
  '     werden soll (Entspricht -y beim DOS copy BEFEHL)
 
  Dim FileStructur As SHFILEOPSTRUCT
  Dim FLAG As Integer
 
  FLAG = 0
  If InStr(Source, vbNullChar + vbNullChar) > 0 Then _
    FLAG = FLAG + FnF_MULTIDESTFILES
 
  If InStr(Source, "*") > 0 Then _
    FLAG = FLAG + FnF_FILESONLY
 
  If Ueberschreiben = True Then _
    FLAG = FLAG + FnF_NOCONFIRMATION
 
  With FileStructur
    .wFunc = FN_COPY
    .pFrom = Check_NullChars(Source)
    .pTo = Dest
    .fFlags = FLAG
  End With
 
  fCopy = SHFileOperation(FileStructur)
End Function

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: gkwelz
Datum: 17.04.08 15:12

Hallo Dieter,

jetzt klappt es.

Vielen Dank.

Gruß
Gunter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 28.10.08 00:13

Hallo!
Die Struktur SHFILEOPSTRUCT hat sich geändert!
(Wahrscheinlich schon seit Win2K):
fAnyOperationsAborted as Long und nicht Boolean.
Das fällt dann höchst unangenehm auf, wenn lpszProgressTitle belegt wird.
Dann stürzt das Programm kommentarlos ab.
Unter http://support.microsoft.com/kb/151799/de wird beschrieben, wie der Aufruf zu erfolgen hat, wenn lpszProgressTitle belegt wird.

wb_3001
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 24.01.09 11:03

Hallo,

habe ein Problem mit dem Aufruf und Parameterübergabe von fCopy

Habe schon Stunden herum experimitiert, finde aber leider keine Lösung.

ich möchte eien Ordner bzw, Dateien und Ordner zum kopieren übergeben.

Erhalte aber nur Fehlermeldungen.

Hier ein Beispielversuch:

Source = "G:\temp\test\"
Dest = "G:\test\"
result = fCopy(Source, Dest, True)

finde ich irgendwo ein Beispiel zur Parameterübergabe?

Freue mich über eine kleine Unterstützung

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 10.08.09 10:29

Hallo,

wie übergebe ich eine Liste von Dateien an die Funktion fCopy

Soweit ich es verstanden habe muß ich die Datei-Liste erst über die Funktion:
FilesFromArray(liste() As String)
ertellen.

Als Erklärung steht im TIPP nur:
'Dateiname mit Wildcards (TEST.*,*.TMP,*.*)
'Ordner
'oder Liste (vorher aufrufen)

Leider kein Beispiel zur Parameterübergabe?
Meine Frage, gibt es ein kleines Beispiel zur Parameterübergabe der Dateiliste

Freue mich über jede kleine Unterstützung

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 10.08.09 17:14

Hallo Minkey!
Wenn Deine Frage noch aktuell ist:
1. fCopy muß wohl FileCopy heißen! So heißt es in VB-Classic, DotNet, VBA!
2. Mittels FileCopy kann nur eine Quelle und ein Ziel angegeben werden!

Unter der lokalen Hilfe von Visual Studio 2008 heißt es:

FileCopy-Funktion
Kopiert eine Datei

Das My.Computer.FileSystem-Objekt ermöglicht bei Datei-E/A-Vorgängen höhere Produktivität und Leistung als FileCopy. Weitere Informationen finden Sie unter My.Computer.FileSystem.CopyFile-Methode.

Public Sub FileCopy( _
ByVal Source As String, _
ByVal Destination As String _
)

Parameter:
Source
Erforderlich. String-Ausdruck, der den Namen der Datei angibt, die kopiert werden soll. Source kann das Verzeichnis bzw. den Ordner und das Laufwerk der Quelldatei enthalten.

Destination
Erforderlich. String-Ausdruck, der den Namen der Zieldatei angibt. Destination kann das Verzeichnis bzw. den Ordner und das Laufwerk der Zieldatei enthalten.

Wenn Du ein Array mit den Dateien hast, mußt Du die Tabellenzeilen einzeln an FileCopy übergeben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 10.08.09 17:30

Hallo wb_3001,

nein, FileCopy meinte ich nicht,
Sondern:
Den Tipp 207: Kopieren, Verschieben, Löschen wie im Explorer
im VB@Archiv.
In diesem Tip soll steht folgender Hinweis zur Übergabe eineer Datei-Liste:

' SOURCE: Dateiname
' Dateiname mit Wildcards (TEST.*,*.TMP,*.*)
' oder Liste (vorher aufrufen)

Leider gibt es aber kein Beispiel mit welchem Aufruf diese Liste an die Funktion fCopy (im benannten Tipp) übergen wird.
Der Hinweis "Liste vorher aufrufen" ist nicz weiter erläutert ????

Da probier ich schon eine ganze Zeit vergebens dran rum.
Habe die Frage schon einmal in diesem Forum gestellt, leider auch damals keine Hilfe.

Danke

Minkey

the Cat
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 10.08.09 18:59

Hallo!
Jetzt mußt Du mir auf die Sprünge helfen, vielleicht gehts dann weiter:
Was ist das für eine Funktion fCopy. Welche Sprache?
VBA, VBNet, VBClassic kanns nicht sein.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 12.08.09 17:03

Hallo minkey!
Ich stand einfach auf dem Draht.
Mit fCopy ist die selbstgestrickte Funktion wie im Tip 207 beschrieben gemeint.
Da ich direkt in diese Diskussion eingestiegen bin, ist es mir irgendwie nicht mehr gelungen den ursprünglichen Tip 207 zu finden.
Sorry.
Aber ich schaue mir das an und sage Bescheid.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 12.08.09 17:24

Hallo Hallo wb_3001,

danke!
Schön, dass Du es Dir mal ansehen willst.
Die Funktion ist eigentlich sehr gut.
Benutze fCopy schon lange um einzelne Dateien oder ganze Ordner zu kopieren.
Geht sehr schnell, viel schneller als CopyFile bzw. FileCopy

Jetzt wollte ich aber eine Liste von Dateien an die Funktion übergeben.
Das bekomme ich einfach nicht hin.

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 13.08.09 01:38

Hallo minkey!
Also es ist wie folgt:
Ich habe ein kleines Testprogramm geschrieben und die Kopierfunktion mittels zweier Tabelle getestet.
1. Die Tabellen der Source- und der Destination-Files müssen synchron sein, d.h. es müssen genau so viele Source-Files wie Destinationfiles vorhanden sein.
Wenn der Destinationfile anders lautet als der SourceFile wird der Sourcefile mit dem "neuen" Destinationnamen kopiert (also zusätzlich umbenannt).
2. Die Funktion
Public Function FilesFromArray(Liste() As String) As String
kannst Du nur für die Quellfiles verwenden, da die Existenz des je Tabellenzeile enthaltenen Files geprüft wird. Dieses Prüfen ist bei (zumeist ja noch) nicht existierenden Destination-Files oder Wildcards für Dest-Files natürlich nicht sinnvoll.
3. Es müssen in den Tabellenzeilen der Source- und Destination-Files die voll ausqualifizierten Filenamen angegeben sein. Ob UNC-Pfade (\\PC-Name\Freigabename\Verzeichnis\File) auch unterstützt werden, habe ich nicht getestet.

Die beste Lösung ist:
Jeweils einen String als Parameter für Source und Destination aus einer Tabelle synchron kreieren, in denen jeder File mit einem chr(0) und der gesamte String mit einem weiteren chr(0) abgeschlossen ist. Als Vorlage möge die Funktion FilesFromArray dienen.

Beim Testen habe ich die Schleife der Funktion FilesFromArray auf
For i = 0 To UBound(Liste)
'If FileExists(Liste(i)) Then
' Datei-Eintrag mit CHR(0) abschließen
temp = temp + Liste(i) + vbNullChar
'Else
'MsgBox (Liste(i) & "existiert hier nicht")
'End If
Next
reduziert!

So geht's:
Dim strTabSource() As String
Dim strTabDest() As String
.....die obigen Tabellen belegen und dann
strSource = FilesFromArray(strTabSource)
strDest = FilesFromArray(strTabDest)

lngResult = fCopy(strSource, strDest, False od. True)

Gutes Gelingen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 13.08.09 08:33

Hallo wb_3001,

da hast Du Dir ja sehr viel Mühe gegeben.
Muß ich mich wirklich sehr bei Dir bedanken!
Zum Teil hatte ich den Ablauf aber schon vorher kapiert.

Ich hatte nur ein Problem bei der Übergabe der Liste.

Übergebener String (Source)
C:\Temp\Datei01.dat C:\Temp\Datei02.dat ...........)

Für das Ziel hatte ich wie gefordert die selbe Anzahl von Dateien übergeben nur eben ein anderes Laufwerk.
String (Dest)
D:\Temp\Datei01.dat D:\Temp\Datei02.dat ...........)

Geht aber mit der Funktion fCopy einfach nicht???

Gebe ich als Ziel aber nur D:\Temp ein funktioniert es.
Damit habe ich dass Problem endlich gelöst.
Es ist aber in dem Beispiel irgendwie nicht richtig erklärt.

Nochmals Danke für Deine Unterstützung

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 13.08.09 10:58

Hallo minkey!
Also ich habe Deine Variante mit den voll ausqualifizierten Dateinamen

Übergebener String (Source)
C:\Temp\Datei01.dat C:\Temp\Datei02.dat ...........)

String (Dest)
D:\Temp\Datei01.dat D:\Temp\Datei02.dat ...........)

(zwar mit anderen Dateinamen aber ebenfalls nur unterschiedlicher Laufwerksangabe) probiert, bei mir funktioniert es!

Welche Fehlermeldung erhältst Du?
Bist Du ganz sicher, daß in String (Dest) gegenüber String Source wirklich nur das Laufwerk unterschiedlich ist?
Kannst Du den Code posten?

Wenn Du willst, kann ich Dir mein kleines Testprogramm zur Verfügung stellen!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 14.08.09 09:02

Hallo,
Antwort kommt leider etwas Verspätet,war 2 Tage im KLinikum.

Bei mir kommt die Fehlermeldung:
Das Verzeichnis "C:\Temp\Datei1.dat" konnte nicht erstellt werden.
Obwohl es sich ja um eine Datei und kein Verzeichnis handelt.

Durch die Fehlermeldung kam ich auf die Idee, nur das Verzeichnis anzugeben.

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 14.08.09 10:54

Hallo minkey!
< Antwort kommt leider etwas Verspätet,war 2 Tage im KLinikum.
Hoffentlich nichts Ernstes!

Microsofts Fehlermeldung sind oftmals nicht treffend.

Aber:
Wenn das Dest-Verzeichnis existiert geht alles glatt.
Wenn das Dest-Verzeichnis nicht existiert öffnet sich ein Dialogfenster:
The H:\Temp Folder does not exist.
Do you want to ceate it? YES/No
Klicke ich auf Yes wird er angelegt und die Files werden anstandslos kopiert.

Irgendwas funktioniert mit Deinem Code anscheinend nicht.
Vielleicht sendest Du mir Deinen Code damit ich Dir weiterhelfen kann.
Oder willst nicht doch meine Variante der Nutzung von fCopy ausprobieren?

Übrigens: Fahre mit Windows XP Prof, SP3 engl. Sprachversion.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 14.08.09 12:57

Hallo wb_3001,

eigentlich komme ich ja jetzt klar.
>>Du hast Dir ja schon genug Mühe gegeben.
Trotzdem anbei der Code.
Sind nur wenige Zeilen.
Ich kopiere quasi für eine Diashow alle Bilder und benötigten System-Dateien auf einenUSB-Stick.
Die DiaShow kann anschließend auf anderen PCs ohne Installation betrachtet werden.
Da aber nicht alle Dateien aus dem Programmverzeichnis benötigt werden, übergebe ich nur eine Liste der benötigten Dateien.

Private Sub CopyDaten()
Dim Source As String
Dim Dest As String

Quelle = "C:\Temp\Datei001.dat" & vbNullChar & "C:\Temp\Datei002.dat" & vbNullChar & "C:\Temp\Datei003.dat"

'funktioniert nicht
Dest = "D:\Temp\Datei001.dat" & vbNullChar & "D:\Temp\Datei002.dat" & vbNullChar & "D:\Temp\Datei003.dat"

'so funktioniert es
Dest = "C:\Temp"
fCopy Source, Dest, True

End Sub


'Die Funktion fCopy selbst und zugehörigen Routinen sind unverändert wie im Beispiel im VB-Archiv

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 15.08.09 22:11

Hallo minkey!
Soweit ich es sehen kann, fehlen am Ende der Strings Dest **u n d** Quelle jeweils 2x vbNullChar.
Egal ob Du nur eine Datei oder mehrere kopierst.
Als Beispiel:
Dest = "D:\Temp\Datei001.dat" & vbNullChar & "D:\Temp\Datei002.dat" & vbNullChar & "D:\Temp\Datei003.dat" & vbNullChar & vbNullChar

wb_3001
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: minkey
Datum: 16.08.09 11:14

Hallo wb_3001,

das war die Lösung!!!!!!!!

2x vbNullChar am Ende des Strings, dass wußte ich nicht

Jetzt funktioniert alles wie gewünscht!

Danke

Minkey
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Kopieren, Verschieben, Löschen wie im Explorer 
Autor: wb_3001
Datum: 16.08.09 15:53

Hallo minkey!
Freut mich auch!
wb_3001
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel