![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TFileStream
Александр В. © (2008-02-06 18:37:00)Есть такой код, им считывается заголовок файла:
FS := TFileStream.Create(file, fmOpenRead);
try
if FS.Read(FSHeader, sizeof(TFSHeader)) = SizeOf(TFSHeader) then
begin
...
И такая загвоздка: на одной системе спокойно читается на одной, и отказывается работать на другой по ошибке "Stream read error". Возможности отладить на проблемной машине не могу.
В чем может быть проблема? В каком случае такая ошибка модет возникнкть?
Александр В. (2008-02-08 12:50:00) [1]Так заголовок в файл же записывается спокойно. Без ошибок. А вот при открытии происходит такая ошибка.
Или такое может быть при правах не администратора?
Anatoly Podgoretsky (2008-02-07 22:18:00) [2]Если программа не является системной утилитой для администратора, то она должна быть разработана так, что бы могла работать из под самого бесправного пользователя, а это означает, что она должна писать только туда, куда разрешено пользователю и не куда больше.
Александр В. (2008-02-07 20:55:00) [3]Посмотрел я файл созданный на проблемной машине - и этот заголовок нормально читается без ошибки в системе на которой компилировали изначально.
На проблемной машине, у пользователя - не права администратора. Может действительно в правах Windows дело?
Есть идеи ещё, что делать?
ANB (2008-02-07 12:13:00) [4]
> В случае отсутствия прав
Из-за прав файл бы даже не открылся.
Anatoly Podgoretsky (2008-02-07 12:07:00) [5]
> В каком случае такая ошибка может быть?
В случае отсутствия прав
antonn (work) (2008-02-07 11:58:00) [6]забыл уже:) просто сам юзал только readbuffer :)
Palladin (2008-02-07 11:54:00) [7]функция TStream.Read возвращает количество фактически прочитанных байт, ничего не прочтет - ноль и вернет
Palladin (2008-02-07 11:53:00) [8]нет
antonn (work) (2008-02-07 11:50:00) [9]а если файл меньше, чем sizeof() то будет AV?
Palladin (2008-02-07 11:43:00) [10]ты учитывай что файл может быть и в десятки раз больше SizeOf, но указатель может стоять в конце файла
Palladin (2008-02-07 11:42:00) [11]а чего тут не понятного? считали и проверили сколько считали...
antonn (work) (2008-02-07 11:40:00) [12]что то я не пому конструкции
if FS.Read(FSHeader, sizeof(TFSHeader)) = SizeOf(TFSHeader)
не проще сразу проверить, чтобы FS был больше sizeof?
Palladin (2008-02-07 11:00:00) [13]а попросить созданные файлики прислать тебе и глазами посмотреть, что же там?
Александр В. (2008-02-07 09:23:00) [14]
> (компилитесь в одном месте?)
Компилируется все на одной системе, на ней все работает, на двух других ситуация выше. На всех компьютерах запускается один и тот же exe.
Файл создается на той же системе на которой и открывается (ну или отказывается открываться).
Slym (2008-02-07 06:05:00) [15]sizeof(TFSHeader) - на обоих машинах одинаковый? (компилитесь в одном месте?)
Джо (2008-02-06 21:48:00) [16]Прошерстите файл Classes.pas на предмет вхождения ресурсной строки SReadError и увидите места, где потенциально это может случиться. И вернитесь к мышам.
Джо (2008-02-06 21:44:00) [17]> [3] Александр В. (06.02.08 21:43)
> Совсем нет предположений?
>
> В каком случае такая ошибка может быть?
Например, файл могли погрызть мыши.
Александр В. (2008-02-06 21:43:00) [18]Совсем нет предположений?
В каком случае такая ошибка может быть?
Александр В. (2008-02-06 19:23:00) [19]Вообще я сейчас уже точно не вспомню, какие в ходе экспериментов были файлы. (сегодня нет возможности повторить)
Возможно было такое, что создавали файл на одной машине (на которой все хорошо), а открывали на другой и вот там случалась ошибка.
clickmaker (2008-02-06 19:00:00) [20]
> на одной системе спокойно читается на одной, и отказывается
> работать на другой по ошибке "Stream read error
один и тот же файл?