Repositions read/write point.
function FileSeek(Handle: Integer; Offset: Integer; Origin: Integer): Integer; overload; function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64; overload;
int FileSeek(int Handle, int Offset, int Origin); Int64 FileSeek(int Handle, const Int64 Offset, int Origin);
SysUtils
Use FileSeek to reposition the read/write point in a file that was opened with FileOpen or FileCreate. Handle is the file handle that was returned by FileOpen or FileCreate.
Offset specifies the number of bytes from Origin where the file pointer should be positioned. Origin is a code with three possible values, denoting the beginning of the file, the end of the file, and the current position of the file pointer.
Origin |
Action |
0 |
The file pointer is positioned Offset bytes from the beginning of the file. |
1 |
The file pointer is positioned Offset bytes from its current position. |
2 |
The file pointer is positioned Offset bytes from the end of the file. |
If FileSeek is successful, it returns the new position of the file pointer; otherwise, it returns -1.
C++ Examples:
/* The following example uses a button, a string grid, and an Open dialog box on a form. When the button is clicked, the user is prompted for a filename. When the user clicks OK, the specified file is opened, read into a buffer, and closed. Then the buffer is displayed in two columns of the string grid. The first column contains the character values in the buffer. The second column contains the numeric values of the characters in the buffer. */ void __fastcall TForm1::Button1Click(TObject *Sender) { int iFileHandle; int iFileLength; int iBytesRead; char *pszBuffer; if (OpenDialog1->Execute()) { try { iFileHandle = FileOpen(OpenDialog1->FileName, fmOpenRead); iFileLength = FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); pszBuffer = PChar(AllocMem(iFileLength+1)); // pszBuffer = new char[iFileLength+1]; iBytesRead = FileRead(iFileHandle, pszBuffer, iFileLength); FileClose(iFileHandle); for (int i=0;i<iBytesRead;i++) { StringGrid1->RowCount += 1; StringGrid1->Cells[1][i+1] = pszBuffer[i]; StringGrid1->Cells[2][i+1] = IntToStr((int)pszBuffer[i]); } delete [] pszBuffer; } catch(...) { Application->MessageBox("Can't perform one of the following file operations: Open, Seek, Read, Close.", "File Error", IDOK); } } }
Delphi Examples:
{ The following example uses a button, a string grid, and an Open dialog box on a form. When the button is clicked, the user is prompted for a filename. When the user clicks OK, the specified file is opened, read into a buffer, and closed. Then the buffer is displayed in two columns of the string grid. The first column contains the character values in the buffer. The second column contains the numeric values of the characters in the buffer. } procedure TForm1.Button1Click(Sender: TObject); var iFileHandle: Integer; iFileLength: Integer; iBytesRead: Integer; Buffer: PChar; i: Integer; begin if OpenDialog1.Execute then begin try iFileHandle := SysUtils.FileOpen(OpenDialog1.FileName, fmOpenRead); iFileLength := SysUtils.FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); Buffer := PChar(System.AllocMem(iFileLength + 1)); iBytesRead := SysUtils.FileRead(iFileHandle, Buffer^, iFileLength); FileClose(iFileHandle); for i := 0 to iBytesRead-1 do begin StringGrid1.RowCount := StringGrid1.RowCount + 1; StringGrid1.Cells[1,i+1] := Buffer[i]; StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer); end; end; end;
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
|
What do you think about this topic? Send feedback!
|