Opens a specified file using a specified access mode.
function FileOpen(const FileName: string; Mode: LongWord): Integer;
int FileOpen(const AnsiString FileName, LongWord Mode);
SysUtils
Use FileOpen to open a file and obtain a file handle. The access mode value is constructed by or-ing one of the fmOpen constants with one of the fmShare constants defined in File open mode constants. If the return value is 0 or greater, the function was successful and the value is the file handle of the opened file. A return value of -1 indicates that an error occurred.
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 = 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:
{ This example uses a file listbox and a regular listbox on a form. The following routine scans through the files listed in the file listbox and lists the sizes of any selected files to the regular list box. To exercise the error condition create a file in the Debug directory, start this application and then delete the file. Now try to list the size of the deleted file. Set the MultiSelect and ExtendedSelect properties on the FileListBox. } procedure TForm1.Button1Click(Sender: TObject); var F: File; i, filehandle: Integer; begin for i := 0 to (FileListBox1.Items.Count - 1) do begin try if FileListBox1.Selected[i] then begin if not FileExists(FileListBox1.Items.Strings[i]) then begin MessageDlg('File: ' + FileListBox1.Items.Strings[i] + ' not found', mtError, [mbOk], 0); Continue; end; filehandle:= FileOpen(FileListBox1.Items.Strings[i], 1); if (filehandle = -1) then begin MessageDlg('File: ' + FileListBox1.Items.Strings[i] + ' cannot be opened with access mode 1.', mtError, [mbOk], 0); Continue; end else FileClose(filehandle); AssignFile(F, FileListBox1.Items.Strings[i]); Reset(F, 1); ListBox1.Items.Add( FileListBox1.Items.Strings[i] + ': ' + IntToStr(FileSize(F))); CloseFile(F); end; finally { do something here } end; end; end;
{ This example requires a TEdit, a button and a string grid. Enter the file name in the TEdit and click the button to open that file. Notice that the file cannot be read. Remove the fmOpenWrite and the fmShareDenyNone access and the string grid loads fine. } procedure OpenForShare(const FileName: String); var FileHandle : Integer; iFileLength: Integer; iBytesRead: Integer; Buffer: PChar; i: Integer; begin FileHandle := SysUtils.FileOpen(FileName, fmOpenWrite or fmShareDenyNone or fmOpenRead); if FileHandle > 0 then begin try MessageDlg('Valid file handle.', mtInformation, [mbOk], 0); iFileLength := SysUtils.FileSeek(FileHandle,0,2); FileSeek(FileHandle, 0, 0); Buffer := PChar(System.AllocMem(iFileLength + 1)); iBytesRead := SysUtils.FileRead(FileHandle, Buffer^, iFileLength); for i := 0 to iBytesRead-1 do begin Form1.StringGrid1.RowCount := Form1.StringGrid1.RowCount + 1; Form1.StringGrid1.Cells[1, i + 1] := Buffer[i]; Form1.StringGrid1.Cells[2, i + 1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer); end; end else MessageDlg('Open error: FileHandle = negative DOS error code.', mtInformation, [mbOk], 0); end; procedure TForm1.Button1Click(Sender: TObject); begin OpenForShare(Edit1.Text); end;
{ 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!
|