|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: |
unit FileMapping;
interface
uses
Windows;
type
TFileMap = class(TObject)
private
FFileName : String;
FileHandle : THandle;
MapHandle : THandle;
FBOFPtr : Pointer;
FEOFPtr : Pointer;
FFileSize : DWord;
public
constructor Create(FileName : String);
destructor Destroy; override;
procedure CreateFile(Size : DWord); overload;
procedure CreateFile(FileName : String; Size : DWord); overload;
procedure Open; overload;
procedure Open(FileName : String); overload;
procedure Close;
function FilePtr(Ofs : DWord) : Pointer;
property BOF : Pointer read FBOFPtr;
property EOF : Pointer read FEOFPtr;
property FileSize : DWord read FFileSize;
property FileName : String read FFileName write FFileName;
end;
implementation
{ TFileMap }
uses
SysUtils,
Dialogs;
constructor TFileMap.Create(FileName: String);
begin
inherited Create;
FFileSize:=0;
FBOFPtr:=NIL;
FEOFPtr:=NIL;
MapHandle:=0;
FileHandle:=INVALID_HANDLE_VALUE;
Open(FileName);
end;
destructor TFileMap.Destroy;
begin
Close;
inherited;
end;
procedure TFileMap.CreateFile(Size: DWord);
begin
Close;
FileHandle:=Windows.CreateFile(PChar(FFileName),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
NIL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
if FileHandle<>INVALID_HANDLE_VALUE then
MapHandle:=CreateFileMapping(FileHandle,
NIL,
PAGE_READWRITE,
0, Size,NIL);
if MapHandle<>0 then
FBOFPtr:=MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS,0,0,Size);
if FBOFPtr<>NIL then begin
FFileSize:=Size;
FEOFPtr:=POINTER(DWORD(FBOFPtr)+FFileSize);
end else begin
ShowMessage(Format('Error %d. "%s"',[GetLastError,SysErrorMessage(GetLastError)]));
Close;
end;
end;
procedure TFileMap.CreateFile(FileName: String; Size: DWord);
begin
if FileName<>'' then begin
FFileName:=FileName;
CreateFile(Size);
end;
end;
procedure TFileMap.Open;
begin
Close;
FileHandle:=Windows.CreateFile(PChar(FFileName),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
NIL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_SEQUENTIAL_SCAN,
0);
if FileHandle<>INVALID_HANDLE_VALUE then
MapHandle:=CreateFileMapping(FileHandle,
NIL,
PAGE_READWRITE,
0,0,NIL);
if MapHandle<>INVALID_HANDLE_VALUE then
FBOFPtr:=MapViewOfFile(MapHandle, FILE_MAP_ALL_ACCESS,0,0,0);
if FBOFPtr<>NIL then begin
FFileSize:=GetFileSize(FileHandle, NIL);
FEOFPtr:=POINTER(DWORD(FBOFPtr)+FFileSize);
end else begin
Close;
end;
end;
procedure TFileMap.Open(FileName: String);
begin
if FileName<>'' then begin
FFileName:=FileName;
Open;
end;
end;
procedure TFileMap.Close;
begin
FFileSize:=0;
if FBOFPtr<>NIL then begin
FlushViewOfFile(FBOFPtr, 0); // Flush to disk
UnmapViewOfFile(FBOFPtr); // Unmap the view
FBOFPtr:=NIL;
FEOFPtr:=NIL;
end;
if MapHandle<>0 then begin
CloseHandle(MapHandle);
MapHandle:=0;
end;
if FileHandle<>INVALID_HANDLE_VALUE then begin
CloseHandle(FileHandle);
FileHandle:=INVALID_HANDLE_VALUE;
end;
end;
function TFileMap.FilePtr(Ofs: DWord): Pointer;
begin
if (FBOFPtr<>NIL) and (Ofs<FileSize) then
Result:=POINTER(DWORD(FBOFPtr)+Ofs)
else
Result:=NIL;
end;
end.
|
Advertisement
| Hall of Fame |