2015-02-12 3 views
0

Я занимаюсь лабораторной работой, и мне нужно преобразовать исходный файл по определенному алгоритму. Вот мой код:Почему не удалось стереть и переименовать?

var f1,f2: text; 

procedure rounds(var f1, f2: text); 
    var a: real; 
    begin 
    while not EoF(f1) do 
     begin 
     read(f1, a); 
     write(f2, a:0:1, ' '); 
     end; 
    end; 

begin 
    assign(f1, './lab.txt'); 
    reset(f1); 
    assign(f2, './temp'); rewrite(f2); 
    rounds(f1,f2); 
    close(f1); 
    close(f2); 
    Erase(f1); 
    rename(f2, 'lab.txt'); 
end. 

Почему бы не удалить f1 и f2 не переименовали? И я могу использовать только последовательные файлы

+0

Потому что вы закрываете эти файлы перед этими операциями. – TLama

+0

Файлы ** должны быть закрыты перед тем, как их можно стереть или переименовать (см. Мой ответ ниже). Обязательно для '' Erase() '' и '' Rename'' не открывать их. – user1438038

+1

@ user1438038, правда, но закрытие * отменяет их. Это была моя точка зрения. – TLama

ответ

2

Убедитесь, что ваши файлы не открываются никаким приложением. Из документации FreePascal:

Erase удаляет неоткрытый файл с диска. Файл должен быть назначен с помощью Assign, но не открыт с сбросом или повторной записью.

Program EraseDemo; 

Var MyFile: Text; 

begin 
    Assign(MyFile, 'demo.txt'); 
    Rewrite(MyFile); 
    Writeln(MyFile, 'Lorem Ipsum dolor est'); 
    close (MyFile); 

    Erase(MyFile); 
end. 

Rename изменяет имя назначенного файла F на S. F должен быть назначен, но не открывается.

Program RenameDemo; 

Var MyFile: Text; 

begin 
    Assign(MyFile, paramstr(1)); 
    Rename(MyFile, paramstr(2)); 
end. 
Смежные вопросы