Я пишу свою программу на Delphi 7. Мне нужно, чтобы она работала только с именами, отличными от Unicode. Если он находит имя файла Unicode, он должен просто игнорировать его.
Мой код выглядит так:
var Filename: String;
if not FileExists(Filename) then Exit;
F := TFileStream(Filename, fmOpenRead or fmShareDenyWrite);
Однако в случае некоторых имен файлов Unicode FileExists () возвращает true, но затем TFileStream вызывает исключение, потому что путь неверен.
Например:
Файл с именем: "loop 輪紋 .jpg" читается в имя файла как "loop ??. Jpg". Это ожидаемое поведение. TFileStream не может прочитать такой файл (потому что в каталоге нет «loop ??. Jpg») и вызывает исключение. Но FileExists () должен поймать, что этот файл не существует. Почему это не работает? Потому что он определяется как:
function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;
и FileAge () определяется как:
function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
...
FindFirstFile использует «loop ??. Jpg» в качестве маски и затем находит «loop 輪紋 .jpg».
Итак, вопрос звучит так:
1) Могу ли я в Delphi 7 как-то легко использовать имена файлов Unicode в TFileStream?
или
2) Какую функцию я должен использовать вместо FileExists для получения правильных результатов?