Форум: "Прочее";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизПочему возникает ошибка при попытке чтения блока. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c