Помощь - Поиск - Пользователи - Календарь
Полная версия: Запись в файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
suriv
Код
uses crt,dos;
var
t:text;
s:string;
begin
clrscr;
assign(t,'c:\lab.txt');
append(t);
write(t,s);
close(t);
readln;
end.

Почему не работает? unsure.gif
В чем моя ошибка.
volvo
suriv
А перед началом работы файл "c:\lab.txt" уже существует? Если нет, то Append будет давать ошибку...
suriv
да. существует "c:\lab.txt"

ЗЫ то же самое и с чтением:
Код

uses crt,dos;
var
t:text;
s:string;
begin
clrscr;
assign(t,'c:\lab.txt');
reset(t);
read(t,s);
close(t);
readln;
end.
suriv
Ну! и че делать?
xds
Проверь наличие у файла аттрибута "read-only" (при установленном r/o Append не работает). Если C:\ - том NTFS, то проверь права доступа к файлу. Код в обоих случаях рабочий - ошибка не в нем... если не считать того, что s в первом примере не инициализирована. В данном случае это не критично, т. к. BP 7.0 и FP очищают сегмент (секцию) данных. Впрочем, на этот факт не следует всерьёз полагаться - очистка производится, но не гарантируется.
ShadowWatcher
xds, очищается оно только в режиме Debug'а. А так переменные скидываются в неинициализируемый сегмент...
xds
В BP 7.0 код инициализации заполняет сегмент данных нулями всегда:
Код
mov    di,0052
push   ds
pop    es
mov    cx,82A0
sub    cx,di
shr    cx,1
xor    ax,ax
cld
rep stosw
ret


Можешь проверить (скомпилируй и запусти без IDE):
program Code;

{$D-}

var
a: array[0..32767] of Byte;
i: Integer;

begin
for i := 0 to 32767 do
if a[ i ] <> 0 then
begin
Writeln('a: uninitialized.');
Exit;
end;
Writeln('a: filled with zeros.');
end.
ShadowWatcher
Как показывает практика: не всегда. Помнишь первое правило олимпиад: обнуление, обнуление и ещё раз обнуление.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.