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;