Using Event Routine for Renaming Text Files. Renaming Not Working. Code Included.
nezzreth
✭
in RobotStudio
I'm trying to use an event routine to check a directory for any text files over 4kb. If it finds a file matching that description I want to move and rename the file with the date as part of the name. I keep running into "Can't Rename File"
I have this code in the user.sys module set to trigger with an Event RESET:
I have this code in the user.sys module set to trigger with an Event RESET:
VAR String Date;
VAR iodev logfile;
VAR dir directory;
VAR string filename;
PROC rSaveAndClearEvent()<-------This is the routine triggered by the event RESET
rSearchDir "HOME:/TEMPDATA","rSaveAndClear";
ENDPROC
PROC rSearchDir(string dirname, string actionproc)<-------Which Proc Calls this
IF IsFile(dirname \Directory) THEN
OpenDir directory, dirname;
WHILE ReadDir(directory, filename) DO
! .. and . is the parent and resp. this directory
IF filename <> ".." AND filename <> "." THEN
rSearchDir dirname+"/"+filename, actionproc;
ENDIF
ENDWHILE
CloseDir directory;
ELSE
%actionproc% dirname;
ENDIF
ERROR
RAISE;
ENDPROC
PROC rSaveAndClear(string filename)
IF FileSize(filename) > 4096 THEN
Date:=CDate();
RenameFile filename, "Home:/ERRORDATA/"+Date+filename;<-----I know this is the line of code giving me the problems.
Open filename, logfile\write; Right now, 'filename' contains the entire path Home:/TEMPDATA/******.txt
Write logfile, " "; Is there a way to pull out just the actual filename and use it in the RenameFile?
Close logfile; If I only use "Home:/ERRORDATA/"+Date; The rest of the code works, but only gives me the date and on
ENDIF the next file I get an error that I already have a file with that name (obvious, but I wanted to demonstrate
RETURN; everything else is working)
ENDPROC
0
Comments
-
See the attached on function StrPart, use the "filename" variable in the function as below.
part := StrPart(FileName,15,8);
You need to know how long the file name is - if they vary you will need to use STRLEN to find the total length of the "FileName" then subtract the known 15 characters of the path from it to get the file name length.....
1 -
Graeme saves the day again!
I played around with StrPart and StrLen and got it working.
This is what my final code looks like:PROC rSaveAndClear(string filename)IF FileSize(filename) > 1024 THENDate:=CDate();nStringLength:=StrLen(filename);nNameLength:=nStringLength-19;part:=StrPart(filename,16,nNameLength);RenameFile filename, "Home:/ERRORDATA/"+part+"_"+Date+".txt";Open filename, logfile\write;Write logfile, " ";Close logfile;
ENDIFRETURN;ENDPROC
Thank you very much for your help!0
Categories
- All Categories
- 5.5K RobotStudio
- 394 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 249 ScreenMaker
- 2.7K Robot Controller
- 309 IRC5
- 59 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 783 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 4 Job listings