Существует ли объект, доступный для DCOM, который разрешает потоковую передачу файла UTF8 с блокировкой записи?

Объект TextStream Scripting.FileSystemObject поддерживает Unicode в стиле Windows и «обычный текст», измененный системной кодовой страницей, но, похоже, не поддерживающий UTF8. Однако на самом деле он может передавать файлы, заблокированные для обновлений, такие как файл журнала IIS.

ADODB.Stream поддерживает UTF-8 (или необработанный двоичный файл), но не будет "LoadFromFile" файл, который был заблокирован для обновления, несмотря на то, что файл можно открыть, скажем, в блокноте. (Результаты ошибки: файл ADODB.Stream не может быть открыт. с кодом ошибки 0x800a0bba) — несмотря на попытку открыть поток в режиме «Чтение» или «Общий». Похоже, что COM-объект на стороне сервера требует большей блокировки, чем я на самом деле запрашиваю.

Есть ли другие альтернативы? Я вызываю их удаленно через DCOM, однако даже тестирование на самой хост-системе приводит к тому же поведению.

В идеале должен быть компонент, который будет действовать как поток (т. е. поддерживать механизмы поиска), может либо передавать необработанные байты (двоичные), либо может обрабатывать обычный текст, Unicode и UTF-8, а также может читать файлы, открытые для записи. . Кто-нибудь знает такого зверя?


person Dan Fleet    schedule 28.04.2009    source источник


Ответы (1)


Я не уверен, что это то, что вы ищете, но вы можете создать свой собственный стример на стороне сервера, взгляните на IPipeByte. Это интерфейс, который существует со времен win2k и позволит вам легко передавать байты между клиентом и сервером. Поскольку вы будете выполнять фактическое чтение из файла, проблемы с разрешениями будут только теми, которые вам навязывает ОС. И, конечно же, текстовый формат не будет проблемой.

Есть хорошая статья об использовании каналов, которую можно найти здесь. Код примера отсутствует, но, вероятно, его можно найти в автономном MSDN.

person eran    schedule 29.04.2009
comment
Я посмотрю на это, спасибо. В идеале я бы использовал уже существующий объект/компонент, но если мне нужно свернуть свой собственный, это может быть весьма полезным. - person Dan Fleet; 29.04.2009
comment
Прошло некоторое время с тех пор, как я использовал каналы, но пример кода IIRC вполне готов к использованию как есть, и его изменение в соответствии с вашими потребностями должно быть довольно простым. Трубопровод сделан, остается только работа с файлами. - person eran; 29.04.2009
comment
В итоге я не стал использовать каналы, но попытался самостоятельно обернуть объект потока и выставить его через DCom, чтобы делать то, что мне нужно. Мне не повезло найти «официальную» удаленно доступную реализацию потока, которая одинаково хорошо работала с файлами с блокировкой записи И юникодом или UTF-8. - person Dan Fleet; 11.05.2009