Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: : Fehler beim Umbenennen der Datei

  Alt 2. Dez 2007, 13:02
nja, das einzige Prolem ist also nur, daß du die Dateien schon im ANSI-Mode ausließt und dort alle nicht kompatieblen Unicode-Zeichen durch '?' ersetzt wurden ... an dieser Stelle schon die UnicodeZeichen zerstört sind und es ist nicht möglich dieses wieder in einen UnicodeString zurückzuwandeln ... wie soll denn irgendjemand/irgendwas nur aus einem '?' wieder das ursprüngliche Zeichen rausbekommen?

Also entweder mußt die immer mit dem Unicodenamen arbeiten, also diesen als Unicode auslesen und auch beim zum Umbennenen der Datei die Unicode-APIs verwenden.

alternativ kannst du auch die 8.3-DOS-Dateinamen verwenden, welche jede Datei besitzt.
Hierbei muß der Zielname aber auch als ANSI vorliegen, was du ja eh willst
Delphi-Quellcode:
type
  PDateiRec = ^TDateiRec;
  TDateiRec = packed record
    _DateiName : TFileName;
    _FileName : TFileName;
    _Erw0 : TFileName;
    _Erw1 : TFileName;
    _Pfad : TFileName;
    _Time : TDateTime;
    _Attr : integer;
    _Size : integer;
    _CRC64Calc : int64;
  end;

if FindFirst(APfad + AMaske, faAnyFile and not faDirectory, sr) = 0 then
begin
  repeat
    if (sr.Attr and faDirectory) = 0 then
    begin
      // aktueller Dateiname in 8.3-Version
      DeinRecord.Dateiname := sr.FindData.cAlternateFileName;
      // Dateiname in ANSI
      DeinRecord.NeuerDateiname := sr.Name;
      // '?' durch '_' oder Anderes ersetzen
      for i := 1 to Length(DeinRecord.NeuerDateiname) do
        if DeinRecord.NeuerDateiname[i] = '?then
          DeinRecord.NeuerDateiname[i] := '_';

      DeinRecord._Erw0 := _ExtractFileExtOhnePunkt(DeinRecord.NeuerDateiname);
      DeinRecord._Erw1 := ExtractFileExt(DeinRecord.NeuerDateiname);
      DeinRecord._FileName := ChangeFileExt(DeinRecord.NeuerDateiname,'');
      DeinRecord._Pfad := APfad;
      DeinRecord._Time := _DosDateTimeToDateTime(sr.Time);
      DeinRecord._Attr := sr.Attr;
      DeinRecord._Size := sr.Size;
    end;
  until FindNext(sr) <> 0;
  FindClose(sr);
end;
DeinRecord.NeuerDateiname könntest du dann noch nach wünschen ändern
und zum umbennen dann z.B.
Delphi-Quellcode:
pFrom := DeinRecord.Dateiname;
pTo := DeinRecord.NeuerDateiname;
$2B or not $2B
  Mit Zitat antworten Zitat