Главная страница
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.028 c
3-1160046075
Shade__
2006-10-05 15:01
2006.12.17
Коннект к MySQL через прокси


11-1140813817
AndrewHz
2006-02-24 23:43
2006.12.17
В KOL Memo1.lines.loadfromfile() не работает


2-1164884290
pyJIoH
2006-11-30 13:58
2006.12.17
Экспорт в rtf. Ünicode =)


4-1154629515
ancara
2006-08-03 22:25
2006.12.17
определить момент подключения USB-накопителя


1-1162547389
Dmitry_177
2006-11-03 12:49
2006.12.17
Удалить первые n-байт из файла