Changeset 31 for trunk/UDriveScan.pas
- Timestamp:
- Apr 30, 2016, 12:16:19 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UDriveScan.pas
r29 r31 125 125 implementation 126 126 127 uses 128 UFileStreamEx; 129 127 130 resourcestring 128 131 SUnknownRunMode = 'Unknown run mode'; … … 177 180 function TTestStream.Write(const Buffer; Count: Longint): Longint; 178 181 begin 182 Result := 0; 179 183 end; 180 184 181 185 function TTestStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; 182 186 begin 187 Result := 0; 183 188 end; 184 189 … … 293 298 F: TStream; 294 299 RealSize: Integer; 295 Buffer: array of Byte; 300 Buffer: Pointer; 301 BufferAligned: Pointer; 296 302 I: Integer; 303 Alignment: Integer; 297 304 begin 298 305 try … … 301 308 if ConfigTest then F := TTestStream.Create 302 309 else begin 310 //if Mode = rmRead then F := TFileStreamEx.Create(DriveName, fmOpenRead, [ffDirect]) 311 // else if Mode = rmWrite then F := TFileStreamEx.Create(DriveName, fmOpenReadWrite, [ffDirect]); 303 312 if Mode = rmRead then F := TFileStream.Create(DriveName, fmOpenRead) 304 313 else if Mode = rmWrite then F := TFileStream.Create(DriveName, fmOpenReadWrite); 305 314 end; 306 315 try 307 SetLength(Buffer, SectorSize); 316 Alignment := SectorSize; 317 Buffer := GetMem(SectorSize + Alignment); 318 BufferAligned := Pointer(Int64(Buffer) - (Int64(Buffer) and (Alignment - 1)) + Alignment); 308 319 if Mode = rmWrite then begin 309 320 if not WritePatternRandom then 310 FillChar(Buffer [0], Length(Buffer), WritePattern)311 else for I := 0 to Length(Buffer)- 1 do312 Buffer[I]:= Random(256);321 FillChar(BufferAligned^, SectorSize, WritePattern) 322 else for I := 0 to SectorSize - 1 do 323 PByte(Int64(BufferAligned) + I)^ := Random(256); 313 324 end; 314 325 while FSectorCurrent < SectorEnd do begin … … 317 328 DoChange; 318 329 F.Position := FSectorCurrent * SectorSize; 319 if Mode = rmRead then RealSize := F.Read(Buffer [0], SectorSize)320 else if Mode = rmWrite then RealSize := F.Write(Buffer [0], SectorSize)330 if Mode = rmRead then RealSize := F.Read(BufferAligned^, SectorSize) 331 else if Mode = rmWrite then RealSize := F.Write(BufferAligned^, SectorSize) 321 332 else raise Exception.Create(SUnknownRunMode); 322 333 finally … … 333 344 if Terminated then Break; 334 345 end; 346 FreeMem(Buffer); 335 347 finally 336 348 F.Free;
Note:
See TracChangeset
for help on using the changeset viewer.