Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Почему возникает ошибка при попытке чтения блока.   Найти похожие ветки 

 
Cerberus ©   (2006-12-05 00:00) [0]

AssignFile(Src, OpenDialog1.FileName);
 Reset(Src);
   while not EoF(Src) do begin
   BlockRead(Src,buf,sizeof(string));//вот здесь
   end;
  CloseFile(src);


 
Gero ©   (2006-12-05 00:01) [1]

Какая ошибка?


 
Kolan ©   (2006-12-05 00:03) [2]

> sizeof(string));//

Из-за этого видимо..


 
Anatoly Podgoretsky ©   (2006-12-05 00:03) [3]

> Cerberus  (05.12.2006)  [0]

Очень информативно.
Годы идут, а человек все тот же.


 
Cerberus ©   (2006-12-05 00:08) [4]

Теперь не какую программа вообще вылетает.
А раньше выдовал Ввода-вывода.


 
Cerberus ©   (2006-12-05 00:08) [5]

Теперь не какую программа вообще вылетает.
А раньше выдовал Ввода-вывода.


 
Cerberus ©   (2006-12-05 00:09) [6]


> Kolan ©   (05.12.06 00:03) [2]
> > sizeof(string));//

Такая конструкция в blockwrite работает нормально.


 
Kolan ©   (2006-12-05 00:12) [7]

Не понятно что такое Buf, но с количеством наверно так:
Ха, хотел написать что-то вроде Length(string)*SizeOf(string[1]), возник вопрос что такое string?


 
Gero ©   (2006-12-05 00:15) [8]

> [6] Cerberus ©   (05.12.06 00:09)

Да, 4 байта возвращает. Или 256.


 
Джо ©   (2006-12-05 00:16) [9]

> [6] Cerberus ©   (05.12.06 00:09)
>
> > Kolan ©   (05.12.06 00:03) [2]
> > > sizeof(string));//
>
> Такая конструкция в blockwrite работает нормально.

Значешь, сколько будет SizeOf(string). Возможно, тебя удивит, но это выражение всегда будет равно 4, в текущих реализациях Делфи.


 
ProgRAMmer Dimonych ©   (2006-12-05 00:16) [10]

> Такая конструкция в blockwrite работает нормально.
Мне что-то подсказывает, что SizeOf(string) будет выдавать то, что нужно, только в отдельных случаях. String - это же массив of Char. Если Length9String)=0, то SizeOf(String)=1, наверное (1 байт - длина строки или идентификатор конца)?


 
Cerberus ©   (2006-12-05 00:17) [11]

var buf : string;

> Kolan ©   (05.12.06 00:12) [7]

String - тип данных;


 
Gero ©   (2006-12-05 00:18) [12]

> [9] Джо ©   (05.12.06 00:16)
> Возможно, тебя удивит, но это выражение всегда будет равно
> 4, в текущих реализациях Делфи.

Не всегда :)


 
ProgRAMmer Dimonych ©   (2006-12-05 00:18) [13]

> Cerberus ©   (05.12.06 00:17) [11]
См. [8]-[9] и небольшое пояснение в [10].


 
Cerberus ©   (2006-12-05 00:18) [14]


> Джо ©   (05.12.06 00:16) [9]

Нет меня это не удивит это чего я и добиваюсь.


 
Gero ©   (2006-12-05 00:19) [15]

> [10] ProgRAMmer Dimonych ©   (05.12.06 00:16)

Ты изрекаешь бред, советую почитать теорию.


 
ProgRAMmer Dimonych ©   (2006-12-05 00:19) [16]

> Cerberus ©   (05.12.06 00:18) [14]
> Нет меня это не удивит это чего я и добиваюсь.
Тогда не проще ли написать вместо SizeOf() просто 4?


 
Джо ©   (2006-12-05 00:19) [17]

> [12] Gero ©   (05.12.06 00:18)
> > [9] Джо ©   (05.12.06 00:16)
> > Возможно, тебя удивит, но это выражение всегда будет равно
>
> > 4, в текущих реализациях Делфи.
>
> Не всегда :)

Ну да, конечно, если установить, что string = ShortString, то да :)


 
Gero ©   (2006-12-05 00:21) [18]

> [10] ProgRAMmer Dimonych ©   (05.12.06 00:16)

Хотя если ты про ShortString, то я неправ.


 
ProgRAMmer Dimonych ©   (2006-12-05 00:21) [19]

> Gero ©   (05.12.06 00:19) [15]
По поводу результата SizeOf? Возможно. Никогда не пользовался BlockRead//BlockWrite, поэтому не приходилоь и сталкиваться с размером стринга. А по поводу природы постоянности размера - я прав? Или нет?


 
Gero ©   (2006-12-05 00:21) [20]

> [14] Cerberus ©   (05.12.06 00:18)

Чего ты добивашься? Неработоспособной программы?


 
Gero ©   (2006-12-05 00:24) [21]

> [19] ProgRAMmer Dimonych ©   (05.12.06 00:21)


> А по поводу природы постоянности размера - я прав? Или нет?

Для ShortString прав, там будет так, как ты описал. А по умолчанию string (AnsiString) — это указатель. Следовательно, ничего удивительного, что SizeOf(string) = SizeOf(Pointer).


 
Cerberus ©   (2006-12-05 00:25) [22]

Всё равно даже если sizeof(string) заменит простым числом ситуация аналогична.


 
Gero ©   (2006-12-05 00:25) [23]

> [22] Cerberus ©   (05.12.06 00:25)

Это и не удивительно.


 
Anatoly Podgoretsky ©   (2006-12-05 00:25) [24]

> ProgRAMmer Dimonych  (05.12.2006 0:19:16)  [16]

Были такие, вместо Integer писали 2


 
Anatoly Podgoretsky ©   (2006-12-05 00:26) [25]

> ProgRAMmer Dimonych  (05.12.2006 0:21:19)  [19]

Неправ, читай предыдущее сообщение.


 
Sha ©   (2006-12-05 01:20) [26]

Лучше читать просто в буфер - не ошибешься,
а если уж непременно в строку хочется то так:  
 
 AssignFile(Src, OpenDialog1.FileName);
 Reset(Src,1);
 SetLength(buf,1024);
 repeat
   BlockRead(Src,buf[1],Length(string),Count);
   тут юзаем Count байт из нашей строки
 until Count=0;
 CloseFile(src);


 
Sha ©   (2006-12-05 01:22) [27]

сорри у тебя ошибку скопировал ))
надо
AssignFile(Src, OpenDialog1.FileName);
Reset(Src,1);
SetLength(buf,1024);
repeat
  BlockRead(Src,buf[1],Length(buf),Count);  
  тут юзаем Count байт из нашей строки
until Count=0;
CloseFile(src);



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.053 c
2-1164702053
Mishenka
2006-11-28 11:20
2006.12.24
Повторный запуск программы


6-1153984676
nuf
2006-07-27 11:17
2006.12.24
как сохранить страничку из интернета


15-1164886688
flaxe
2006-11-30 14:38
2006.12.24
Дискретная Математика!


15-1165266043
Cerberus
2006-12-05 00:00
2006.12.24
Почему возникает ошибка при попытке чтения блока.


2-1165467722
N@mCo
2006-12-07 08:02
2006.12.24
ikonka proqrammi ne bila vidna v taskbar i v sistem traye