[progress Communities] [progress Openedge Abl] Forum Post: Re: Remove The Last Char Of A...

Status
Not open for further replies.
M

Matt Gilarde

Guest
Here's code that uses SetEndOfFile to chop one byte off the end of a file. &GLOBAL-DEFINE GENERIC_WRITE 0x40000000 &GLOBAL-DEFINE OPEN_EXISTING 3 &GLOBAL-DEFINE FILE_ATTRIBUTE_NORMAL 0x80 &GLOBAL-DEFINE FILE_END 2 PROCEDURE CreateFileA EXTERNAL "kernel32": DEFINE INPUT PARAMETER lpFileName AS CHARACTER. DEFINE INPUT PARAMETER dwDesiredAccess AS LONG. DEFINE INPUT PARAMETER dwShareMode AS LONG. DEFINE INPUT PARAMETER lpSecurityAttributes AS LONG. DEFINE INPUT PARAMETER dwCreationDisposition AS LONG. DEFINE INPUT PARAMETER dwFlagsAndAttributes AS LONG. DEFINE INPUT PARAMETER hTemplateFile AS LONG. DEFINE RETURN PARAMETER ReturnValue AS LONG. END PROCEDURE. PROCEDURE CloseHandle EXTERNAL "kernel32" : DEFINE INPUT PARAMETER hObject AS LONG. DEFINE RETURN PARAMETER ReturnValue AS LONG. END PROCEDURE. PROCEDURE SetEndOfFile EXTERNAL "kernel32" : DEFINE INPUT PARAMETER hObject AS LONG. DEFINE RETURN PARAMETER ReturnValue AS LONG. END PROCEDURE. PROCEDURE SetFilePointer EXTERNAL "kernel32" : DEFINE INPUT PARAMETER hObject AS LONG. DEFINE INPUT PARAMETER distanceToMove AS LONG. &IF {&PROCESS-ARCHITECTURE} = 64 &THEN DEFINE INPUT PARAMETER distanceToMoveHigh AS INT64. &ELSE DEFINE INPUT PARAMETER distanceToMoveHigh AS LONG. &ENDIF DEFINE INPUT PARAMETER moveMethd AS LONG. DEFINE RETURN PARAMETER ReturnValue AS LONG. END PROCEDURE. DEFINE VARIABLE lpSecurityAtt AS INTEGER NO-UNDO. DEFINE VARIABLE hObject AS INTEGER NO-UNDO. DEFINE VARIABLE nReturn AS INTEGER NO-UNDO. RUN CreateFileA (INPUT "file.txt", INPUT {&GENERIC_WRITE}, 0, /* no sharing */ lpSecurityAtt, {&OPEN_EXISTING}, {&FILE_ATTRIBUTE_NORMAL}, 0, OUTPUT hObject). IF hObject <> -1 THEN DO: RUN SetFilePointer(hObject, -1, 0, {&FILE_END}, OUTPUT nReturn). RUN SetEndOfFile(hObject, OUTPUT nReturn). RUN CloseHandle(hObject, OUTPUT nReturn). END.

Continue reading...
 
Status
Not open for further replies.
Top