powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Stream read error Д7
14 сообщений из 14, страница 1 из 1
Stream read error Д7
    #39892798
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TLOBLocator.LoadFromFile(const FileName: string);
var F: TFileStream;
begin

    Seek(0, soFromBeginning);
    F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
    try
      CopyFrom(F, F.Size); // тут валится ошибка на некоторых файлах из некоторых папок. 15 лет работало без ошибок, и тут вдруг
      Trim;
    finally
      F.Free;
    end;
  end;
end;

коллеги
а можно ли конкретизировать ошибку "Stream read error"
чего ей конкретно не нравится

Файлы все нормальные, не битые, не залоченные, Вордом открываются
Win-2003
Папка, с которой читаются файлы, сетевая
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892804
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть получится понять в чем ошибка, если самому создавать и открывать TFileStream и переделать код на вызов TLOBLocator.LoadFromStream вместо TLOBLocator.LoadFromFile.
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892807
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.

для начала из кода перед вызовом TLOBLocator.LoadFromStream() самому попробовать прочесть сколько-нибудь, потом перевести .Position := 0 и далее уже как выше написал. Но если вылетело исключение, то, возможно, GetLastError() что-нибудь и покажет.
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892821
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
может, проблемы с сетью, раз уж файлы на сетевом диске
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892832
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator
может, проблемы с сетью, раз уж файлы на сетевом диске


Word его открывает
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892835
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
andreymx
defecator
может, проблемы с сетью, раз уж файлы на сетевом диске


Word его открывает


а это стабильно через поток не открывается какой-то конкретный (один и тот же) файл ?
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxWord его открывает

Это не показатель. Хомяцкие версии винды имеют привычку отказывать в открытии файла по
сети если количество открытых файлов (скорость открытия) превысит некоторый порог.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892854
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

andreymxWord его открывает

Это не показатель. Хомяцкие версии винды имеют привычку отказывать в открытии файла по
сети если количество открытых файлов (скорость открытия) превысит некоторый порог.
win 2003
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892886
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Покажи реализацию CopyFrom в D7
...
Рейтинг: 0 / 0
Stream read error Д7
    #39892979
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
andreymx,

Покажи реализацию CopyFrom в D7
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function TStream.CopyFrom(Source: TStream; Count: Int64): Int64;
const
  MaxBufSize = $F000;
var
  BufSize, N: Integer;
  Buffer: PChar;
begin
  if Count = 0 then
  begin
    Source.Position := 0;
    Count := Source.Size;
  end;
  Result := Count;
  if Count > MaxBufSize then BufSize := MaxBufSize else BufSize := Count;
  GetMem(Buffer, BufSize);
  try
    while Count <> 0 do
    begin
      if Count > BufSize then N := BufSize else N := Count;
      Source.ReadBuffer(Buffer^, N);
      WriteBuffer(Buffer^, N);
      Dec(Count, N);
    end;
  finally
    FreeMem(Buffer, BufSize);
  end;
end;

...
Рейтинг: 0 / 0
Stream read error Д7
    #39893067
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почти идентичная Rio
andreymx
Код: pascal
1.
Source.ReadBuffer(Buffer^, N);

Собственно вот отсюда растут ноги. На определенной итерации из файла читается меньше чем N байт. Как одна из причин - нестабильный канал связи.

В Rio сделали так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
procedure TStream.ReadBuffer(var Buffer: TBytes; Offset, Count: NativeInt);
var
  LTotalCount,
  LReadCount: NativeInt;
begin
  { Perform a read directly. Most of the time this will succeed
    without the need to go into the WHILE loop. }
  LTotalCount := Read(Buffer, Offset, Count);
  { Check if there was an error }
  if LTotalCount < 0 then
    ReadError;

  while (LTotalCount < Count) do
  begin
    { Try to read a contiguous block of <Count> size }
    LReadCount := Read(Buffer, Offset + LTotalCount, (Count - LTotalCount));

    { Check if we read something and decrease the number of bytes left to read }
    if LReadCount <= 0 then
      ReadError
    else
      Inc(LTotalCount, LReadCount);
  end
end;

т.е. читаем, пока читается хоть что-то
...
Рейтинг: 0 / 0
Stream read error Д7
    #39894719
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказалось
Не делфовая ошибка
Там на системном уровне
...
Рейтинг: 0 / 0
Stream read error Д7
    #39895136
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Там на системном уровне
Это как?
...
Рейтинг: 0 / 0
Stream read error Д7
    #39895263
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
andreymx
Там на системном уровне
Это как?
сетевой ресурс с хххххххх глючит на некоторых файлах на вин-2003
И не только на делфовых пирогах, а и на фаре и на Ворде

Сорри, остальное писать не могу
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Stream read error Д7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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