не коректно работает ввод-вывод с файла в коде. Что не так?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

не коректно работает ввод-вывод с файла в коде. Что не так?

Сообщение M@N » 14.10.2015 18:59:00

Пишу программу на Lazarus, одной из функций которой является шифрование файлов методом Цезаря.
Есть такой кусок кода:
Код: Выделить всё
                AssignFile(Form1.Code8,Form1.FileCode);//Исходный файл. var Form1.Code8:file of byte;Form1.FileCode:string; значения переданы выше.
                AssignFile(Form1.Coder8,Form1.FileCoder);//Зашифрованый файл. var Form1.Coder8:file of byte;Form1.FileCoder:string; значения переданы выше.
                //Открыть файлы...
                Reset(Form1.Code8);
                Rewrite(Form1.Coder8);
                //Шифрование...
                while (not eof(Form1.Code8)) do
                  begin
                    {$I-}
                    Read(Form1.Code8,x);
                    if (IOResult<>0) then begin Form1.FinishedSave('Error');goto Finish;end;//Ловим ошибки...
                    Inc(x,Form1.C_Coder.Value);
                    Write(Form1.Coder8,x);
                    if (IOResult<>0) then begin Form1.FinishedSave('Error');goto Finish;end;//Ловим ошибки...
                    {$I+}
                  end;
                //Закрыть файлы...
                CloseFile(Form1.Code8);//Исходный файл.
                CloseFile(Form1.Coder8);//Зашифрованый файл.
                Form1.FinishedSave('Ok');//Выводит сообщение об успехе сохранения зашифрованого файла


Работает (сохраняет) только через раз (в прямом смысле слова). Подскажите, пожалуйста, что не так?
M@N
незнакомец
 
Сообщения: 5
Зарегистрирован: 17.08.2014 21:36:48

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение скалогрыз » 14.10.2015 19:26:22

goto не так.
Избавься от goto и всё заработает.

Но если хочешь goto оставить, vitaly_l как раз специалист! напиши ему в личку, если он здесь не ответит.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение vitaly_l » 14.10.2015 21:50:35

скалогрыз писал(а):Избавься от goto и всё заработает.

Не слушайте "вредного" скалогрыза! Замените цикл while на "ПСЕВДО ЦИКЛ" из GoTo и "всё заработает"...
И не забудь-те закрыть файлы, когда "выходите" по GoTo.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение Padre_Mortius » 14.10.2015 21:59:12

vitaly_l, для чего в данном случае менять цикл while на что-то другое?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение vitaly_l » 14.10.2015 22:02:14

Padre_Mortius писал(а):для чего в данном случае менять цикл while на что-то другое?

Это был юмор "в отместку" скалогрызу... Это крошечное продолжение другого холивара.
Я в приведённом коде - только ошибку с закрытием файлов вижу, возможно что-то ещё есть.
Последний раз редактировалось vitaly_l 14.10.2015 22:10:22, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение скалогрыз » 14.10.2015 22:02:28

vitaly_l писал(а):И не забудь-те закрыть файлы, когда "выходите" по GoTo.

правильная подсказка. :mrgreen: :mrgreen: :mrgreen:
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение vitaly_l » 14.10.2015 22:30:36

скалогрыз писал(а):vitaly_l писал(а):
И не забудь-те закрыть файлы, когда "выходите" по GoTo.

правильная подсказка.

PS: А вообще скалогрыз прав, лучше не использовать GoTo, особенно когда можно легко без него обойтись.


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение M@N » 15.10.2015 17:07:39

Извините, что не описал назначение

1. Form1.C_Coder.Value -- целое число от 0 до 255
2. GoTo Finish -- после Finish:; всё коректно с закрытием файла

У меня пропал Internet :cry:
Почему сохраняет файл только через раз, я не знаю. За goto прийму к сведенью. Спасибо.
На всякий случай:
OS: Windows 7 32-bit
Lazarus 1.0.14 на FPC 2.6.2
M@N
незнакомец
 
Сообщения: 5
Зарегистрирован: 17.08.2014 21:36:48

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение vitaly_l » 15.10.2015 17:16:55

M@N писал(а):У меня пропал Internet

Вы точно уверены что у Вас нет интернета? И давно?

PS: приведите весь код полностью, иначе нашему: скалогрызу - будет сложно понять, что ошибки бывают не только при использовании goto.

/
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение Снег Север » 16.10.2015 09:28:11

Перед закрытием записываемого файла рекомендую вызвать Flush.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение M@N » 22.10.2015 16:57:21

Расскажите, пожалуйста о Flush по-подробнее, Снег Север.
M@N
незнакомец
 
Сообщения: 5
Зарегистрирован: 17.08.2014 21:36:48

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение Снег Север » 23.10.2015 06:04:30

Flush empties the internal buffer of an opened file F and writes the contents to disk.
Код: Выделить всё
Var F : Text;

begin
  { Assign F to standard output }
  Assign (F,'');
  Rewrite (F);
  Writeln (F,'This line is written first, but appears later !');
  { At this point the text is in the internal pascal buffer,
    and not yet written to standard output }
  Writeln ('This line appears first, but is written later !');
  { A writeln to 'output' always causes a flush - so this text is
    written to screen }
  Flush (f);
  { At this point, the text written to F is written to screen. }
  Write (F,'Finishing ');
  Close (f);  { Closing a file always causes a flush first }
  Writeln ('off.');
end.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: не коректно работает ввод-вывод с файла в коде. Что не т

Сообщение Alex2013 » 05.11.2015 19:08:27

С "классическими файлами" вообще надо уже завязывать
(Код в system и окрестностях не обновляется веками как результат постоянные проблемы с осью и новым железом ..)
Юзайте TFileStream !
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 221

Рейтинг@Mail.ru