` Comment on an Icetips Article
Icetips - Templates, Tools & Utilities for Clarion Developers

Templates, Tools and Utilities
for Clarion Developers

Add a comment to an Icetips Article

Please add your comments to this article. Please note that you must provide both a name and a valid email address in order for us to publish your comment. Comments are moderated and are not visible until they have been approved. Spam is never approved!

Your Name:  
Email:  
Header text/Subject:  

Please enter your comment in the box below:

Back to article list   Search Articles     Add Comment     Printer friendly     Direct link  

Par2: Copying files and directories using API calls
1998-04-22 -- Stephen Bottomley
 
I'm including a copy of a procedure I have used successfully in 32bit applications on a Win95 machine copying directory trees to a Novell 4.1 server complete with directory creation. The bit's I've commented out are just for error logs I use. MAP MODULE('winapi') GetLastError(),DWORD,PASCAL,RAW,DLL(dll_mode) CopyFile(*CSTRING lpExistingFileName,*CSTRING lpNewFileName,BOOL bFailIfExist),BOOL,RAW,PASCAL,NAME('CopyFileA'),DLL(dll_mode) CreateDirectory(*CSTRING lpPathName,LONG lpSecurityAttributes),BOOL,RAW,PASCAL,NAME('CreateDirectoryA'),DLL(dll_mode) FormatMessage(DWORD,LPCVOID,DWORD,DWORD,*LPSTR,DWORD,va_list),DWORD,PASCAL,R AW,NAME('FormatMessageA'),DLL(dll_mode) END MODULE('C_LIB') Access(*CSTRING,SIGNED),SIGNED,RAW,NAME('_access') END MODULE('COPYTREE.CLW') CopyTree FUNCTION(STRING DirName,STRING TrgtDir),BYTE END END CopyTree PROCEDURE (STRING DirName,STRING TrgtDir) ! Declare Procedure RetVal BYTE,AUTO LogId LONG ErrorText CSTRING(256) SourceDir CSTRING(256),AUTO TargetDir CSTRING(256),AUTO ActionEntry CSTRING(256),AUTO ActionTarget CSTRING(256),AUTO MsgId ULONG,AUTO RecCount LONG,AUTO RC LONG,AUTO SRQ QUEUE,PRE() name STRING(13) date LONG time LONG size LONG attrib BYTE END SECURITY_ATTRIBUTES GROUP nLength DWORD lpSecurityDescriptor LPVOID bInheritHandle BOOL END window WINDOW,AT(,,121,22),FONT('MS Sans Serif',8,,),CENTER,TIMER(1),SYSTEM,GRAY,DOUBLE END CODE RetVal = True !Set to Suceess SourceDir = DirName TargetDir = TrgtDir if SourceDir[len(clip(SourceDir))] <> '\' SourceDir = clip(SourceDir) & '\' . if TargetDir[len(clip(TargetDir))] <> '\' TargetDir = clip(TargetDir) & '\' . if not access(TargetDir,0) = 0 ! LogId = AddLog() clear(ErrorText) if not CreateDirectory(TargetDir,address(SECURITY_ATTRIBUTES)) MsgId = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_IGNORE_INSERTS,0,Get LastError(),0,ErrorText,size(ErrorText),0) ! LogId = AddLog(LogId,,77,'Unable to create: ' & clip(TargetDir),'',ErrorText) RetVal = False return(RetVal) else ! LogId = AddLog(LogId,,0,'Succefull create: ' & clip(TargetDir),) . . Directory(SRQ,clip(SourceDir) & '*.*',1+2+4+10h) !All files and directories RecCount = records(SRQ) loop RC = RecCount to 1 by -1 get(SRQ,RC) if band(SRQ.Attrib,10h) and (SRQ.Name = '..' or SRQ.Name = '.') delete(SRQ) !Get rid of parent directories . . sort(SRQ,SRQ.Attrib) open(window) window{PROP:Hide} = True get(SRQ,records(SRQ)) accept case EVENT() of EVENT:Timer if not records(SRQ) !This needs work post(EVENT:CloseWindow) cycle . get(SRQ,records(SRQ)) !This needs work if band(SRQ.Attrib,10h) post(EVENT:CloseWindow) cycle . ActionEntry = clip(SourceDir) & SRQ.Name ActionTarget = clip(TargetDir) & SRQ.Name ?String1{PROP:Text} = ActionEntry display(?String1) LogId = AddLog() Clear(ErrorText) if not CopyFile(ActionEntry,ActionTarget,0) RetVal = False MsgId = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM+FORMAT_MESSAGE_IGNORE_INSERTS,0,Get LastError(),0,ErrorText,size(ErrorText),0) ! AddLog(LogId,,77,ActionEntry,ActionTarget,ErrorText) else ! AddLog(LogId,,0,ActionEntry,ActionTarget) . delete(SRQ) . . close(window) loop while records(SRQ) get(SRQ,records(SRQ)) ActionEntry = clip(SourceDir) & SRQ.Name ActionTarget = clip(TargetDir) & SRQ.Name if not CopyTree(ActionEntry,ActionTarget) RetVal = False . delete(SRQ) . return RetVal


Today is May 3, 2024, 2:44 am
This article has been viewed 35126 times.



Back to article list   Search Articles   Add Comment   Printer friendly

Login

User Name:

Password: