亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vs_system.pas

?? KSDev.VirtualSream.v1.01.rar 虛擬文件系統,
?? PAS
字號:
{==============================================================================

  Virtual Stream
  Copyright (C) 2004-2006 by Eugene Kryukov
  All rights reserved

  See License.txt for licence information

  $Id: vs_system.pas,v 1.1.1.1 2006/09/26 09:49:37 eugene Exp $

===============================================================================}

unit vs_system;

{$I vs_define.inc}

interface

uses
  SysUtils, Classes, vs_compress, vs_resource, vs_core;

type

  TvsCompressionLevel = (vclNone, vclFastest, vclDefault, vclMax);

  TvsSystem = class(TComponent)
  private
    FStream: TStream;
    FFileSystem: TFileSystem;
    FCompress: boolean;
    FFileName: string;
    FReadOnly: boolean;
    FCompressed: boolean;
    FCompressionLevel: TvsCompressionLevel;
    procedure SetReadOnly(const Value: boolean);
    procedure SetCompressed(const Value: boolean);
    function CorrectPath(const S: string): string;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    procedure CreateEmpty(const AFileName: string; AMaxSizeMb: longword = 64);
    procedure CreateFromFile(const AFileName: string);
    procedure CreateFromStream(const Stream: TStream);
    procedure Clear;

    function CreateStream(const fileName: string; mode: Word): TStream;
    function StreamExists(const fileName: string): boolean;
    function DirectoryExists(const fileName: string): boolean;

    function FileDate(const fileName: string): integer;

    procedure CreateDir(const ADirName: string);

    procedure EraseFile(const AFileName: string);

    function FindFirst(const Path: string; Attr: Integer;
      var F: TSearchRec): Integer;
    function FindNext(var F: TSearchRec): Integer;
    procedure FindClose(var F: TSearchRec);
  published
    property FileName: string read FFileName;
    property ReadOnly: boolean read FReadOnly write SetReadOnly;
    property Compressed: boolean read FCompressed write SetCompressed;
    property CompressionLevel: TvsCompressionLevel read FCompressionLevel write FCompressionLevel default vclFastest;
  end;

  TvsStream = class(TStream)
  private
    FStream: TStream;
  protected
    procedure SetSize(NewSize: Longint); override;
    {$IFDEF KS_COMPILER6_UP}
    procedure SetSize(const NewSize: Int64); override;
    {$ENDIF}
  public
    constructor Create(const ASystem: TvsSystem; const FileName: WideString; const Mode: Word); overload;
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    {$IFDEF KS_COMPILER6_UP}
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
    {$ELSE}
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    {$ENDIF}
  end;

implementation {===============================================================}

type
  THackMemoryStream = class(TMemoryStream);

  TvsCompressStream = class(TStream)
  private
    FFileStream: TStream;
    FMemoryStream: TStream;
    FMode: Word;
    FCompressionLevel: TvsCompressionLevel;
  protected
    procedure SetSize(NewSize: Longint); override;
    {$IFDEF KS_COMPILER6_UP}
    procedure SetSize(const NewSize: Int64); override;
    {$ENDIF}
  public
    constructor Create(const AFileStream: TStream; Mode: Word; CompressionLevel: TvsCompressionLevel); overload;
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    {$IFDEF KS_COMPILER6_UP}
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
    {$ELSE}
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    {$ENDIF}
  end;

{ TvsCompressStream =============================================================}

constructor TvsCompressStream.Create(const AFileStream: TStream; Mode: Word; CompressionLevel: TvsCompressionLevel);
var
  D: TDecompressionStream;
  Size: longword;
begin
  inherited Create;
  FMode := Mode;
  FCompressionLevel := CompressionLevel;
  FFileStream := AFileStream;
  FMemoryStream := TMemoryStream.Create;
  if Mode and fmCreate = 0 then
  begin
    { Create memory copy }
    FFileStream.Position := 0;
    D := TDecompressionStream.Create(FFileStream);
    Size := ReadLongword(D);
    FMemoryStream.CopyFrom(D, Size);
    FMemoryStream.Position := 0;
    D.Free;
  end;
end;

destructor TvsCompressStream.Destroy;
var
  C: TCompressionStream;
  Size: longword;
begin
  if (FMode and fmCreate = fmCreate) or (FMode and fmOpenWrite = fmOpenWrite) then
  begin
    { Create memory copy }
    FFileStream.Position := 0;
    FMemoryStream.Position := 0;
    C := TCompressionStream.Create(TCompressionLevel(FCompressionLevel), FFileStream);
    Size := FMemoryStream.Size;
    WriteLongword(C, Size);
    C.CopyFrom(FMemoryStream, Size);
    C.Free;
  end;
  FMemoryStream.Free;
  FFileStream.Free;
  inherited;
end;

{$IFDEF KS_COMPILER6_UP}
function TvsCompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
{$ELSE}
function TvsCompressStream.Seek(Offset: Longint; Origin: Word): Longint;
{$ENDIF}
begin
  Result := FMemoryStream.Seek(Offset, Origin);
end;

{$IFDEF KS_COMPILER6_UP}
procedure TvsCompressStream.SetSize(const NewSize: Int64);
begin
  THackMemoryStream(FMemoryStream).SetSize(NewSize);
end;
{$ENDIF}

procedure TvsCompressStream.SetSize(NewSize: Integer);
begin
  THackMemoryStream(FMemoryStream).SetSize(NewSize);
end;

function TvsCompressStream.Read(var Buffer; Count: Integer): Longint;
begin
  Result := FMemoryStream.Read(Buffer, Count);
end;

function TvsCompressStream.Write(const Buffer; Count: Integer): Longint;
begin
  Result := FMemoryStream.Write(Buffer, Count);
end;

{ TvsStream ===================================================================}

constructor TvsStream.Create(const ASystem: TvsSystem;
  const FileName: WideString; const Mode: Word);
begin
  inherited Create;
  if ASystem <> nil then
    FStream := ASystem.CreateStream(FileName, Mode);
end;

destructor TvsStream.Destroy;
begin
  if FStream <> nil then
    FStream.Free;
  inherited;
end;

function TvsStream.Read(var Buffer; Count: Integer): Longint;
begin
  if FStream <> nil then
    Result := FStream.Read(Buffer, Count)
  else
    Result := 0;
end;

function TvsStream.Write(const Buffer; Count: Integer): Longint;
begin
  if FStream <> nil then
    Result := FStream.Write(Buffer, Count)
  else
    Result := 0;
end;

{$IFDEF KS_COMPILER6_UP}
function TvsStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
{$ELSE}
function TvsStream.Seek(Offset: Longint; Origin: Word): Longint;
{$ENDIF}
begin
  if FStream <> nil then
    Result := FStream.Seek(Offset, Origin)
  else
    Result := 0;
end;

procedure TvsStream.SetSize(NewSize: Integer);
begin
  if FStream <> nil then
    FStream.Size := NewSize
end;

{$IFDEF KS_COMPILER6_UP}
procedure TvsStream.SetSize(const NewSize: Int64);
begin
  if FStream <> nil then
    FStream.Size := NewSize
end;
{$ENDIF}

{ TvsSystem =============================================================}

constructor TvsSystem.Create(AOwner: TComponent);
begin
  inherited;
  FCompressionLevel := vclFastest;
end;

destructor TvsSystem.Destroy;
begin
  Clear;
  inherited;
end;

procedure TvsSystem.Clear;
begin
  if FFileSystem <> nil then
  begin
    FFileSystem.Free;
    FFileSystem := nil;
  end;
  if FStream <> nil then
  begin
    FStream.Free;
    FStream := nil;
  end;
  FFileName := '';
end;

procedure TvsSystem.CreateFromFile(const AFileName: string);
begin
  Clear;
  if not ReadOnly then
  begin
    FStream := TFileStream.Create(AFileName, fmOpenReadWrite or fmShareDenyWrite);
    FFileSystem := TFileSystem.CreateOpen(FStream, fmOpenRead or fmOpenWrite or fmCreate);
  end
  else
  begin
    FStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
    FFileSystem := TFileSystem.CreateOpen(FStream, fmOpenRead);
  end;
  if FFileSystem <> nil then
  begin
    FFileName := AFileName;
    FReadOnly := FFileSystem.IsReadOnly;
    FCompressed := FFileSystem.Compressed;
  end;
end;

procedure TvsSystem.CreateEmpty(const AFileName: string; AMaxSizeMb: longword = 64);
begin
  Clear;
  FStream := TFileStream.Create(AFileName, fmCreate or fmShareDenyWrite);
  if AMaxSizeMb < 32 then
    AMaxSizeMb := 32;
  if AMaxSizeMb > 2048 then
    AMaxSizeMb := 2048;
  FFileSystem := TFileSystem.CreateEmpty(FStream, FReadOnly, FCompressed, (AMaxSizeMb * 1024 * 1024) div 4096);
  if FFileSystem <> nil then
    FFileName := AFileName;
end;

procedure TvsSystem.CreateFromStream(const Stream: TStream);
begin
  if FReadOnly then
    FFileSystem := TFileSystem.CreateOpen(Stream, fmOpenRead)
  else
    FFileSystem := TFileSystem.CreateOpen(Stream, fmOpenRead or fmOpenWrite or fmCreate);
  FFileName := '';
  if FFileSystem <> nil then
  begin
    FReadOnly := FFileSystem.IsReadOnly;
    FCompressed := FFileSystem.Compressed;
  end;
end;

function TvsSystem.StreamExists(const fileName: string): boolean;
begin
  Result := FFileSystem.FileExists(CorrectPath(fileName));
end;

function TvsSystem.DirectoryExists(const fileName: string): boolean;
begin
  Result := FFileSystem.DirectoryExists(CorrectPath(fileName));
end;

type
  PCharArray = ^TCharArray;
  TCharArray = array [0..MaxInt - 2] of char;

function TvsSystem.CreateStream(const fileName: string;
  mode: Word): TStream;
begin
  if (mode and fmCreate = fmCreate) then
  begin
    Result := TFileSystemStream.Create(FFileSystem, CorrectPath(fileName), fmCreate);
  end
  else
    if (mode and fmOpenWrite = fmOpenWrite) then
    begin
      Result := TFileSystemStream.Create(FFileSystem, CorrectPath(fileName), fmOpenWrite);
    end
    else
    begin
      Result := TFileSystemStream.Create(FFileSystem, CorrectPath(fileName), fmOpenRead);
    end;

  if (Result <> nil) and (TFileSystemStream(Result).FileHandle = nil) then
  begin
    Result.Free;
    Result := nil;
  end
  else
    if FFileSystem.Compressed then
    begin
      Result := TvsCompressStream.Create(Result, Mode, FCompressionLevel);
    end;
end;

function TvsSystem.FileDate(const fileName: string): integer;
var
  F: TFile;
begin
  F := FFileSystem.OpenFileRead(CorrectPath(fileName));
  if F <> nil then
  begin
    Result := DateTimeToFileDate(F.Date);
    F.Free;
  end
  else
    Result := -1;
end;

procedure TvsSystem.SetReadOnly(const Value: boolean);
begin
  if FReadOnly <> Value then
  begin
    FReadOnly := Value;
    if not (csLoading in ComponentState) then
    begin
      FFileSystem.SetReadOnly(Value);
      FReadOnly := FFileSystem.IsReadOnly;
    end;
  end;
end;

procedure TvsSystem.SetCompressed(const Value: boolean);
begin
  if FCompressed <> Value then
  begin
    FCompressed := Value;
  end;
end;

procedure TvsSystem.FindClose(var F: TSearchRec);
begin
  if FFileSystem <> nil then
    FFileSystem.FindClose(F);
end;

function TvsSystem.FindFirst(const Path: string; Attr: Integer;
  var F: TSearchRec): Integer;
begin
  if FFileSystem <> nil then
    Result := FFileSystem.FindFirst(Path, Attr, F)
  else
    Result := -1;
end;

function TvsSystem.FindNext(var F: TSearchRec): Integer;
begin
  if FFileSystem <> nil then
    Result := FFileSystem.FindNext(F)
  else
    Result := -1;
end;

procedure TvsSystem.CreateDir(const ADirName: string);
begin
  if FFileSystem <> nil then
    FFileSystem.CreateDir(ADirName);
end;

procedure TvsSystem.EraseFile(const AFileName: string);
var
  F: TFile;
begin
  if FFileSystem <> nil then
  begin
    F := FFileSystem.OpenFileRead(AFileName);
    if F <> nil then
      FFileSystem.EraseFile(F);
  end;
end;

function TvsSystem.CorrectPath(const S: string): string;
begin
  Result := S;
  if (Length(Result) > 0) and (Result[1] in ['\', '/']) then
    Delete(Result, 1, 1);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级精品久久| 欧美日韩成人综合天天影院| 日韩成人一区二区三区在线观看| 中文字幕日本不卡| 国产精品色在线| 中文字幕日本不卡| 亚洲日本电影在线| 亚洲高清在线精品| 午夜日韩在线观看| 免费精品视频最新在线| 美女免费视频一区| 精品一区二区av| 福利一区福利二区| 99久久伊人网影院| 欧美图片一区二区三区| 欧美日韩国产综合视频在线观看| 欧美三级在线看| 日韩一级片网址| 久久久久国产一区二区三区四区| 久久久电影一区二区三区| 日本一区二区三区国色天香| 亚洲欧洲日韩av| 亚洲国产欧美另类丝袜| 美女在线视频一区| 成人激情图片网| 欧美日韩国产中文| 久久精品一区二区三区av| 亚洲同性同志一二三专区| 亚洲mv大片欧洲mv大片精品| 狠狠色丁香婷婷综合| 91在线丨porny丨国产| 欧美精品在线一区二区三区| 国产欧美一区二区精品性色超碰| 有坂深雪av一区二区精品| 免费av成人在线| 91丝袜美腿高跟国产极品老师| 在线不卡免费av| 国产精品私人自拍| 奇米777欧美一区二区| 99久久免费精品| 精品国产免费人成在线观看| 亚洲精品乱码久久久久久久久 | 91精品国产黑色紧身裤美女| 精品成a人在线观看| 亚洲人成小说网站色在线| 男女男精品视频网| 色哟哟一区二区三区| 久久综合久久综合亚洲| 一区二区三区毛片| 国产乱码精品1区2区3区| 在线观看免费亚洲| 国产视频在线观看一区二区三区 | 4438亚洲最大| 亚洲欧美日韩国产一区二区三区| 精品中文av资源站在线观看| 日本高清无吗v一区| 国产女主播一区| 精品制服美女久久| 欧美一区二区三区白人| 一区二区久久久| 色综合久久中文综合久久牛| 久久精品人人做人人爽人人| 麻豆国产一区二区| 欧美丰满少妇xxxbbb| 亚洲免费资源在线播放| 国产成人av电影在线| www欧美成人18+| 久久精品国内一区二区三区| 欧美一区二区免费| 五月天精品一区二区三区| 欧美午夜在线观看| 亚洲狼人国产精品| 在线日韩一区二区| 一级中文字幕一区二区| 色综合中文字幕国产| 久久久久久久精| 高清久久久久久| 中文字幕人成不卡一区| 成人av午夜电影| 亚洲女人的天堂| 日本精品裸体写真集在线观看| 亚洲欧美韩国综合色| 91精品福利视频| 亚洲bt欧美bt精品| 欧美一区二区三区四区在线观看| 日本伊人午夜精品| 久久只精品国产| 成人av网址在线| 亚洲另类在线视频| 7777精品伊人久久久大香线蕉经典版下载 | av在线不卡免费看| 亚洲日穴在线视频| 9191久久久久久久久久久| 日韩国产欧美三级| 久久婷婷久久一区二区三区| 成人永久aaa| 一区二区三区久久久| 欧美一区二区三区公司| 国产老肥熟一区二区三区| 中文一区二区在线观看| 欧洲一区二区三区在线| 日韩av中文在线观看| 久久久久青草大香线综合精品| eeuss鲁片一区二区三区 | 在线不卡一区二区| 国产成人综合亚洲91猫咪| 国产精品久久久久久久浪潮网站| 99精品黄色片免费大全| 日韩电影在线一区二区三区| 国产欧美日韩在线| 欧美日韩一级二级| 国产一区二区福利视频| 一区二区三区鲁丝不卡| 久久午夜色播影院免费高清| 91亚洲永久精品| 国内成+人亚洲+欧美+综合在线| 亚洲日穴在线视频| 欧美大尺度电影在线| 一本久久综合亚洲鲁鲁五月天| 男女性色大片免费观看一区二区 | 蜜臀久久99精品久久久久久9| 亚洲国产一区在线观看| 精品少妇一区二区三区视频免付费| 成人h动漫精品一区二区| 男男成人高潮片免费网站| 亚洲欧美一区二区三区极速播放 | 色8久久精品久久久久久蜜| 精品一区二区三区免费毛片爱| 亚洲精品视频一区| 精品久久久久香蕉网| 欧美日韩亚洲综合在线| 97aⅴ精品视频一二三区| 国产美女精品在线| 日产欧产美韩系列久久99| 亚洲免费色视频| 国产日韩欧美综合一区| 欧美变态tickle挠乳网站| 欧美性视频一区二区三区| 99re这里只有精品6| 国产69精品久久久久777| 精彩视频一区二区| 日韩精品亚洲一区二区三区免费| 亚洲精品日日夜夜| 亚洲免费观看高清| 中文字幕日本不卡| 中文乱码免费一区二区| 国产亚洲一区二区三区在线观看| 精品少妇一区二区三区视频免付费 | 午夜亚洲国产au精品一区二区| 国产精品你懂的在线欣赏| 国产欧美日韩久久| 国产精品丝袜久久久久久app| 久久久精品影视| 国产三级精品在线| 久久久亚洲精品一区二区三区 | 欧美性大战久久| 欧美日韩一级黄| 欧美高清视频不卡网| 日韩一级大片在线| 欧美成人午夜电影| 久久久精品蜜桃| 欧美激情资源网| ㊣最新国产の精品bt伙计久久| 亚洲视频资源在线| 亚洲国产中文字幕| 日韩电影在线免费观看| 美洲天堂一区二卡三卡四卡视频| 久久精品理论片| 国产成人av网站| 色系网站成人免费| 欧美乱妇15p| 精品国产三级a在线观看| 国产欧美一区二区精品久导航 | 日本成人中文字幕| 久久99国产乱子伦精品免费| 国产精品99久久久久久宅男| 国产91精品露脸国语对白| 91欧美一区二区| 欧美日本国产视频| 久久久国产精华| 亚洲一区二区在线免费看| 免费成人在线视频观看| 成人精品视频一区二区三区尤物| 色婷婷av一区二区三区大白胸| 欧美精品v国产精品v日韩精品| 久久久综合激的五月天| 亚洲日韩欧美一区二区在线| 图片区小说区区亚洲影院| 国产91精品久久久久久久网曝门| 在线视频国产一区| 久久久久久久久免费| 一区二区在线观看视频| 九九九久久久精品| 一本大道综合伊人精品热热 | 一区二区在线观看不卡| 美女在线一区二区| 色综合久久九月婷婷色综合| 日韩欧美一级二级| 亚洲综合丁香婷婷六月香| 丁香亚洲综合激情啪啪综合|