Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавить NewReadFileStreamW [Delphi]


Alextp ©   (2006-02-21 22:31:00) 

Предлагаю по аналогии с функцией 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;


AlexeyT   (2006-02-22 22:05:00) [1]


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

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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо