Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.17;
Скачать: CL | DM;

Вниз

Добавить NewReadFileStreamW   Найти похожие ветки 

 
Alextp ©   (2006-02-21 22:31) [0]

Предлагаю по аналогии с функцией NewReadFileStream добавить
NewReadFileStreamW, принимающую WideString имя файла.
Соответственно, добавится функция FileCreateW, которая вызывает под NT - CreateFileW, а под 9x, для совместимости, CreateFileA.

function NewReadFileStreamW(const FileName: WideString): PStream;
begin
 Result := _NewStream( BaseFileMethods );
 Result.fMethods.fRead := ReadFileStreamProc;
 Result.fData.fHandle := FileCreateW( FileName,
                                     ofOpenRead or ofShareDenyWrite or
ofOpenExisting );
end;

function FileCreateW(const FileName: WideString; OpenFlags: DWord): THandle;
var
 Attr: DWORD;
 vi: TOsVersionInfo;
 IsNT: boolean;
begin
 vi.dwOSVersionInfoSize:= SizeOf(vi);
 GetVersionEx(vi);
 IsNT:= vi.dwPlatformId=VER_PLATFORM_WIN32_NT;

 Attr := (OpenFlags shr 16) and $1FFF;
 if Attr = 0 then Attr := FILE_ATTRIBUTE_NORMAL;
 if IsNT then
 Result := CreateFileW( PWChar(FileName), OpenFlags and $F0000000,
                       OpenFlags and $F, nil, (OpenFlags shr 8) and $F,
                       Attr, 0 )
 else
 Result := CreateFileA( PChar(string(FileName)), OpenFlags and $F0000000,
                       OpenFlags and $F, nil, (OpenFlags shr 8) and $F,
                       Attr, 0 );
end;


 
Vladimir Kladov   (2006-02-22 12:03) [1]

Проблем никаких нет, вопрос только: почему это настолько необходимо? Или есть какие-то ситуации, когда национализированное имя файла не удается использовать как обычную строку? Интересно мне, может файловая система понимать символы unicode в именах файлов в виде какой-нибудь кодировки типа %XXXX? У меня Fat32, я могу как-нибудь проверить сие или только под NTFS такое бывает?


 
AlexeyT ©   (2006-02-22 22:05) [2]


> Проблем никаких нет, вопрос только: почему это настолько
> необходимо?

Просто хорошо бы добавить поддержку юникодных имен.
Это касается не только потоков, а вообще всей KOL.
Ситуации, когда нельзя передать имя файла как обычную ANSI-строку, бывают: например, китайские или японские имена файлов из иероглифов.

Создать юникодные имена можно только под NT/2000/XP, от файловой системы это AFAIK не зависит, на FAT32 я такие имена кажется создавал.



Страницы: 1 вся ветка

Текущий архив: 2006.12.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
2-1164977633
Basis
2006-12-01 15:53
2006.12.17
TreeView


15-1164450886
Jolik
2006-11-25 13:34
2006.12.17
проблема: Delphi2006 и StarTeam2005R2...


3-1160130740
Patrick
2006-10-06 14:32
2006.12.17
Сообщение "Timeout Expired"


15-1164730131
WErqw
2006-11-28 19:08
2006.12.17
Ну дайте решение задачи коммивояжера!!!


15-1164650062
Piter
2006-11-27 20:54
2006.12.17
У всех ICQ накрылась?