![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравия всем! Ищу хороший мануал о работе с стрим и файлстрим. Гуглил, но все что нашел как-то сжато и не оч. понятно. Например нет инфы как загрузить файл в сам стрим, проделать внутри него несколько операций и сохранить в файл. В общем помогите литературой
|
#2
|
||||
|
||||
![]() Ой ли гуглил?
Вот например, как записать строчку в файл через поток Код:
uses Classes, Sysutils; ... var s: string; begin s:= 'Bla-bla-bla'; { fmCreate fmOpenRead fmOpenWrite fmOpenReadWrite fmShareCompat fmShareExclusive fmShareDenyWrite fmShareDenyRead fmShareDenyNone } with TFileStream.create('Имя файла', fmOpenWrite) do try Write(pointer(s)^, Length(s)); // что-то ещё делаем Finally free; end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Alegun, а вот зачем здесь мы используем указатель? В чем подвох? Нельзяли просто написать
Код:
write(s,length(s)); |
#4
|
||||
|
||||
![]() Потому что это типизированный указатель на переменную типа String.
Он содержит в себе не символы, как string или числа, как integer, а только адреса памяти по которым эти самые данные и находятся. Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 10.05.2013 в 16:50. |
#5
|
|||
|
|||
![]() Не робит код - кидает ошибку: EAccessViolation и выделяет строку
Код:
Write(pointer(s)^, Length(s)); |
#6
|
|||
|
|||
![]() Разобрался, все работает. А как удалить нужный байт инфы? Сиком переместиться на нужную позицию, а дальше? Ну например прочитал файл размером 20, как удалить данные на 10й позиции?
|
#7
|
||||
|
||||
![]() Да, так и делается, в основном
Код:
var b: byte; begin b:= #FF; with TFileStream.create('Имя файла', fmOpenReadWrite) do try Seek(10,soFromBeginning); Write(b,1); finally free; end; end; З.Ы. Файловые потоки используются как правило если надо записать/считать файл в больших объёмах, а если нужно байт всего лишь заменить, лучше делать так Код:
var f: file of byte; b: byte; begin AssignFile(f, 'Имя файла'); Reset(f); // или Append(f) Rewrite(f) seek(f,10); // поставить текущее положение b:= #FF; write(f, b); // записать 1 байт //read(f,b); // прочитать 1 байт //Size(f); // количество байт в файле. //Eof(f); // конец файла CloseFile(f); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 10.05.2013 в 18:18. |
#8
|
|||
|
|||
![]() Код:
write(f, b); // записать 1 байт p.s. кстати на это b:= #FF; компилятор ругается [Error] *: Constant expression expected Последний раз редактировалось nano_bot, 10.05.2013 в 19:14. |
#9
|
||||
|
||||
![]() Чтоб не разводить флудильню по элементарному вопросу, пережеванному не один раз и не в одной теме, УК nano_bot пжлст, выложи здесь свои наработки и прикрепи туда образец файла, формата не знаю, постараюсь выполнить и в коде прописать что и как комментами, так будет проще.
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#10
|
|||
|
|||
![]() Ок, сейчас пока нет возможности выложить свои исходники, ибо далеко от своего ПК, как у него буду - выкину сразу!
|