Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: [TFileStream] Widestring Dateinamen

  Alt 2. Mär 2009, 11:25
entweder du steigst auf Delphi2009 um (dort ist es Unicode)
oder du nutzt Fremdkomponente (z.B. von JEDI)
oder du leitest dir eine neue Klasse ab und überschreibst dieses .Create.


[add]
keine Ahnung ob's so richtig ist, aber es kompiliert zumindest
Delphi-Quellcode:
Uses RTLConsts;

Type
  TFileStreamX = Class(TFileStream)
  Public
    Constructor Create(Const FileName: WideString; Mode: Word); Overload;
    Constructor Create(Const FileName: WideString; Mode: Word; Rights: Cardinal); Overload;
    Destructor Destroy; Override;
  End;

Constructor TFileStreamX.Create(Const FileName: WideString; Mode: Word);
  Begin
    Create(Filename, Mode, 0);
  End;

Constructor TFileStreamX.Create(Const FileName: WideString; Mode: Word; Rights: Cardinal);
  Const AccessMode: Array[0..2] of LongWord = (GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE);
    ShareMode: Array[0..4] of LongWord = (0, 0, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE);

  Begin
    If Mode = fmCreate Then Begin
      Inherited Create(CreateFileW(PWideChar(FileName), GENERIC_READ or GENERIC_WRITE,
        0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
      If FHandle < 0 Then
        Raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
    End Else Begin
      If ((Mode and 3) <= fmOpenReadWrite) and ((Mode and $F0) <= fmShareDenyNone) Then Begin
        Inherited Create(CreateFileW(PWideChar(FileName), AccessMode[Mode and 3],
          ShareMode[(Mode and $F0) shr 4], nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0));
      End Else Inherited Create(0);
      If FHandle < 0 Then
        Raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
    end;
  End;

Destructor TFileStreamX.Destroy;
  Begin
    If FHandle >= 0 Then FileClose(FHandle);
    Inherited Destroy;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat