fsFileSeek will move the FILE data pointer to an address offset. The function is used for data addressing in the file before read or write operations. All data is addressed as 8 bit, and after each successful read or write operation, the file data pointer is automatically incremented.
Input:
fd : FILE
FILE descriptor for the file retrieved from fsFileOpen or fsFileCreate.
offset : DINT
Offset from start of file to move the data pointer to.
>= 1
|
- Offset value.
|
0
|
- Start of file.
|
-1
|
- End of file.
|
Returns: INT
0
|
- File pointer moved.
|
-8
|
- File not open.
|
-17
|
- Media communication error (card not supported).
|
-22
|
- Media is busy.
|
-34
|
- Offset value too large.
|
-38
|
- File is no longer accessible and must be closed.
|
Declaration:
FUNCTION fsFileSeek : INT;
VAR_INPUT
fd : FILE;
offset : DINT;
END_VAR;
Example:
IF fsFileExists(name := "\gpslog.dat") THEN
fdGpslog := fsFileOpen(name := "\gpslog.dat");
IF fsFileStatus(fd := fdGpslog) = 0 THEN
IF fsFilePosition(fd := fdGpslog) > 0 THEN
rc := fsFileSeek(fd := fsGpslog, offset := 0);
IF rc = 0 THEN
REPEAT
len1 := fsFileRead(fd := fdGpslog, buffer := ADDR(linsec), length := SIZEOF(linsec));
len2 := fsFileRead(fd := fdGpslog, buffer := ADDR(lat), length := SIZEOF(lat));
len3 := fsFileRead(fd := fdGpslog, buffer := ADDR(lon), length := SIZEOF(lon));
IF len1 = SIZEOF(linsec) AND len2 = SIZEOF(lat) AND len3 = SIZEOF(lon) THEN
...
END_IF;
UNTIL len1 <> SIZEOF(linsec) OR len2 <> SIZEOF(lat) OR len3 <> SIZEOF(lon)
END_REPEAT;
ELSE
END_IF;
ELSE
END_IF;
fsFileClose(fd := fdGpslog);
ELSE
END_IF;
ELSE
END_IF;
...
|