Seite 1 von 2
Status beim kopieren anzeigen!
Verfasst: 17.10.2005 12:08
von newcoder
Hi Leute
Ich möchte in meinem PB Programm ein Daten von einem
Ordner zum anderen kopieren. Das mache ich mit CopyDirectory
und das klappt auch wunderbar! Nur möchte ich jetzt noch einen
Fortschritsbalken oder eine Statusanzeige miteinbauen, damit
man sieht was passiert und weis das, das Progy noch kopiert!
Kann mir jemand sagen wie ich das am einfachsten anstelle ?
Gruß Jon
Verfasst: 17.10.2005 12:16
von hardfalcon
Am einfachsten geht es IMHO, wenn du einen Thread erstellst, der die Größe des Zielverzeichnisses ständig mit der Größe des Ausgangsverzeichnisses vergleicht, und das Ganze, eventuell als Prozent- oder Promille-Angabe an ein StatusBarGadget() weiterreicht.
//EDIT: Willkommen im Forum übrigens!

Verfasst: 17.10.2005 12:32
von newcoder
Kannst du dazu vielleicht einen kleinen quellcode posten?
Verfasst: 17.10.2005 12:32
von ts-soft
Per API:
Code: Alles auswählen
Procedure ForceDirectories(Directory.s)
If Len(Directory) > 0
If (Right(Directory, 1) = "\")
Directory = Left(Directory, Len(Directory) -1)
EndIf
If (Len(Directory) < 3) Or FileSize(Directory) = -2 Or GetPathPart(Directory) = Directory
ProcedureReturn #False
EndIf
ForceDirectories(GetPathPart(Directory))
CreateDirectory(Directory)
ProcedureReturn #True
EndIf
EndProcedure
Procedure TS_CopyFile(SourceFile.s, DestinationPath.s, Flag.l)
flags.l = #FOF_MULTIDESTFILES
If FileSize(SourceFile) = -2
If Right(SourceFile, 1) <> "\" : SourceFile + "\" : EndIf
SourceFile + "*.*"
ForceDirectories(DestinationPath)
Else
If GetExtensionPart(SourceFile) = ""
ForceDirectories(DestinationPath)
If FileSize(DestinationPath) = -2 : DestinationPath + GetFilePart(SourceFile) : EndIf
Else
flags = flags | #FOF_FILESONLY
EndIf
EndIf
If Flag
flags = flags | #FOF_NOCONFIRMATION
ForceDirectories(DestinationPath)
EndIf
SHFileOp.SHFILEOPSTRUCT
SHFileOp\hwnd = WindowID()
SHFileOp\wFunc = #FO_COPY
SHFileOp\pFrom = @SourceFile
SHFileOp\pTo = @DestinationPath
SHFileOp\fFlags = flags
Result.l = SHFileOperation_(SHFileOp)
If Result <> 0
ProcedureReturn 0
Else
ProcedureReturn 1
EndIf
EndProcedure
TS_CopyFile("E:\TS-Temp\Download\*.zip", "E:\Hallo\", 0)
Kopiert den SourceFile.s nach DestinationPath.s. Für SourceFile.s sind Jokerzeichen (z. B. *.htm) erlaubt. Wird als Jokerzeichen *.* angegeben, werden alle Dateien, aber keine Verzeichnisse kopiert. Wird bei SourceFile.s hingegen ein Ordner angegeben, so wird dessen Inhalt mit allen Unterverzeichnissen kopiert.
Wenn der optionale Parameter Flag.l nicht gesetzt ist, wird vor dem überschreiben von Dateien nachgefragt.
Result gleich 0, konnte/n die Datei/en nicht kopiert werden.
Ist leider nicht immer fehlerfrei, keine Lust mehr gehabt

Verfasst: 17.10.2005 12:33
von PAMKKKKK
Unter Windows : In der windows API gibt es ein befehl der heisst: CopyProgressRoutine.
Der macht das.
Schau mal hier:
http://forums.purebasic.com/german/view ... essroutine
Ob das allerdings auch bei CopyDirectory geht, weiss ich nicht.
Sonst musst du alle Dateien und Unterverzeichnisse einzel Kopieren lassen.
Verfasst: 17.10.2005 12:40
von ts-soft
PAMKKKKK hat geschrieben:Unter Windows : In der windows API gibt es ein befehl der heisst: CopyProgressRoutine.
Der verwendete API Befehl heisst aber "CopyFileEx_", nur als Hinweis
Verfasst: 17.10.2005 13:35
von gnozal
Code: Alles auswählen
Procedure ForceDirectories(Directory.s)
If Len(Directory) > 0
If (Right(Directory, 1) = "\")
Directory = Left(Directory, Len(Directory) -1)
EndIf
If (Len(Directory) < 3) Or FileSize(Directory) = -2 Or GetPathPart(Directory) = Directory
ProcedureReturn #False
EndIf
ForceDirectories(GetPathPart(Directory))
CreateDirectory(Directory)
ProcedureReturn #True
EndIf
EndProcedure
Mit Windows geht es auch so :
Verfasst: 17.10.2005 13:41
von ts-soft
gnozal hat geschrieben:
Mit Windows geht es auch so :
Ja, aber erst ab Windows 2000

, deshalb verwende ich das nicht
MSDN hat geschrieben:Requirements
Client Requires Windows XP or Windows 2000 Professional.
Server Requires Windows Server 2003 or Windows 2000 Server.
Redistributable Requires DbgHelp.dll on Windows NT 4.0 and Windows Me/98/95.
Header Declared in Dbghelp.h.
Library Link to Dbghelp.lib.
DLL Requires Dbghelp.dll.
Verfasst: 17.10.2005 15:25
von gnozal
ts-soft hat geschrieben:gnozal hat geschrieben:
Mit Windows geht es auch so :
Ja, aber erst ab Windows 2000

, deshalb verwende ich das nicht
Ich hab Win98 und es funktioniert prima
MakeSureDirectoryPathExists() ist in IMAGEHLP.DLL (PB Windows lib : PureLibraries\Windows\IMAGEHLP)
Aus Win32.hlp :
The IMAGEHLP function set is an API for the Windows NT and Windows 95 operating systems.
Verfasst: 17.10.2005 15:42
von ts-soft
>> Ich hab Win98 und es funktioniert prima
Glaube ich Dir gerne, hab aber festgestellt, das es nicht immer funzt, weiß aber nicht mehr wovon es abhängt. Kann sein, das es WinME wahr?
Vorsicht ist die Mutter der Porzellankiste
