powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прочитать файл в TByteDynArray (SOAP)
19 сообщений из 19, страница 1 из 1
Прочитать файл в TByteDynArray (SOAP)
    #39639354
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал сервис, который должен загружать файлы.
Модуль автогенерации Delphi создал для него класс с методом:
Код: pascal
1.
function UploadDocument(const ABytes: TByteDynArray; const FileName: WideString): WideString; stdcall;


Засада там, где её не ждал - не могу прочитать файл.
Написал лабу, которая пытается скопировать файл и вообще никак не связана с SOAP.
В результате, записывается файл с какой-то ерундой.
Как можно прочитать содержимое файла в TByteDynArray ?


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.Button1Click(Sender: TObject);
var
 ABytes: TByteDynArray;
 Stream, Stream2:TFileStream;
begin
  Stream:=TFileStream.Create(Self.OpenDialog1.FileName,fmOpenRead);
  SetLength(ABytes,Stream.Size);
  Stream.Read(ABytes,Stream.Size);

  Stream2:=TFileStream.Create(OpenDialog1.FileName+'.new',fmCreate);
  Stream2.Write(ABytes,SizeOf(ABytes));
end;


...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639371
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодируй в Base64 и передавай строкой.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639386
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Может это и будет так.

Но сейчас вопрос в том, как считать содержимое файла ?
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639388
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,
Нужно Read применять не к переменной динамического массива, а к первому (т.е. к нулевому) элементу его.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639399
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Ты имеешь ввиду так ?
Код: pascal
1.
Stream.Read(ABytes[0],Stream.Size);



Так я тоже попробовал, но не работает.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639404
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю текстовый документ, в котором пишу "Hello world!"
И не могу создать копию файла используя TByteDynArray

Получается файл аналогичной длинны, с не понятным содержанием.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639406
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо Stream2.Write(ABytes,SizeOf(ABytes)) тоже надо Stream2.Write(ABytes[0],SizeOf(ABytes)) делать.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639407
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BТак я тоже попробовал, но не работает.Потому, что Write тоже нужно до ума довести
Код: pascal
1.
Stream2.Write(ABytes[0], Length(ABytes) * SizeOf(ABytes[0]));
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639408
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. И не SizeOf(ABytes) а length(ABytes).

Как все запущено-то.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639409
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatнадо Stream2.Write(ABytes[0], SizeOf(ABytes) ) делать.а если подумать?
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639411
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько новых интересных вещей, и все в один день. :)
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639412
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_а если подумать?
Если подумать то Length(ABytes) * SizeOf(ABytes[0]) это масло-масляное.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639418
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

УРА!
4 часа катарги прекратились!
Надо действительно считывать ABytes[0] и записывать тоже ABytes[0]
А вот передавать в SOAP уже надо именно ABytes .
Для меня - просто мистика какая та.


Что касается SizeOf и Length, во время опытов там стояло и то, и другое, и третье.
В результате я поставил Stream.Size.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639419
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Ты намекаешь, что на разных платформах может быть разной длина байта?
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639422
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BЧто касается SizeOf и Length, во время опытов там стояло и то, и другое, и третье.
В результате я поставил Stream.Size.

Если работаешь со строками - то лучше делать Length(_String_)*SizeOf(_XXX_Char_). WideChar<>AnsiChar по длине в байтах. Для UTF8 все еще веселее.
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639432
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
c UTF8 все просто
Код: pascal
1.
  ByteCount := TEncoding.UTF8.GetByteCount(S);
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639436
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zeliusc UTF8 все просто


Но помнить об этом надо...
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39639998
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterТы намекаешь, что на разных платформах может быть разной длина байта?Не. Тип переменной имеет свойство меняться. Вначале это array of Byte, потом станет array of Char.

Сам у себя везде пишу Length(array) * SizeOf(array[0]). Кушать не просит, а волнуюсь меньше
...
Рейтинг: 0 / 0
Прочитать файл в TByteDynArray (SOAP)
    #39640016
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты еще вместо array[0] подсунь array[low[array]] а то вдруг чего...
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прочитать файл в TByteDynArray (SOAP)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]