Главная страница
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.056 c
2-1164884290
pyJIoH
2006-11-30 13:58
2006.12.17
Экспорт в rtf. Ünicode =)


1-1162296274
GEN++
2006-10-31 15:04
2006.12.17
Сжатие рисунка


15-1164550562
pumba
2006-11-26 17:16
2006.12.17
Прогу в вуз по базам данных


15-1164798802
Арс
2006-11-29 14:13
2006.12.17
подскажите нормальный хостинг


3-1160471424
Sergiio
2006-10-10 13:10
2006.12.17
ADO, узнать индекс текущей строки