Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Сохранение в файл (http://forum.oszone.net/showthread.php?t=253765)

novashdima 11-02-2013 15:35 2087939

Сохранение в файл
 
Делал так, файл не перезаписывался, хотя имхо должен:
Код:

if SaveDialog.Execute then
  if FileExists(SaveDialog.FileName) then
    begin
      if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
      then Exit;
    end
    else
      IniFile.IniOptions.SaveToFile(SaveDialog.FileName);

Вставил ветку else и туда написал IniFile.IniOptions.SaveToFile(SaveDialog.FileName); и все работает, но почему в начальном варианте не работает? ведь в любом случае последняя строка должна выполняться в любом случае... или я туплю.

LilLoco 11-02-2013 15:50 2087950

Цитата:

Цитата novashdima
но почему в начальном варианте не работает? »

Код начального варианта?

Может вы попросту забыли поставить после end ";"?
Код:

then Exit;
end;


novashdima 11-02-2013 15:51 2087951

Цитата:

Цитата LilLoco
Код начального варианта? »

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

Цитата LilLoco
Может вы попросту забыли поставить после end ";"? »

Перед else точка с запятой не ставится

LilLoco 11-02-2013 16:32 2087976

Цитата:

Цитата novashdima
Перед else точка с запятой не ставится »

В начальном варианте же у вас нет вроде бы else.
Цитата:

Цитата novashdima
Вставил ветку else и туда написал

IniFile.IniOptions.SaveToFile(SaveDialog.FileName); и все работает »

В коде то же.
Цитата:

Цитата novashdima
потом я добавил функцию в указанное место »

Присутствует в коде, значит не начальный вариант.

Либо вы вставили здесь
Цитата:

Цитата novashdima
Код:

then Exit; end
»

Выражайтесь понятнее, пожалуйста.

novashdima 11-02-2013 16:40 2087984

эх.... ок, вот начальная процедура
Код:

procedure TMainForm.SaveButtonClick(Sender: TObject);
begin
  if SaveDialog.Execute then
  if FileExists(SaveDialog.FileName) then
    begin
      if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
      then Exit;
    end
    else
      IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end;

Вот добавил строку:
Код:

procedure TMainForm.SaveButtonClick(Sender: TObject);
begin
  if SaveDialog.Execute then
  if FileExists(SaveDialog.FileName) then
    begin
      if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk)
      then Exit
      else IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
    end
    else
      IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
end;


torauma 11-02-2013 17:05 2088000

Цитата:

Цитата novashdima
ведь в любом случае последняя строка должна выполняться в любом случае... »

Это вот эта чтоли:
Цитата:

Цитата novashdima
else IniFile.IniOptions.SaveToFile(SaveDialog.FileName); »

С чего это она в любом случае должна выполняться? Только если файл не существует.
Вот во втором варианте вы вписали сохранение файла и в ту ветку, которая выполняется при существовании файла, поэтому у вас и начало работать.

novashdima 11-02-2013 17:16 2088008

Цитата:

Цитата torauma
С чего это она в любом случае должна выполнятся? Только если файл не существует. »

Хм... действительно провтыкал...

iMirRor 12-02-2013 15:03 2088709

Если вы используете "Exit", то зачем столько "else", не проще было бы так:
Код:

procedure TMainForm.SaveButtonClick(Sender: TObject); 
begin   
  if SaveDialog.Execute then   
  begin
    if FileExists(SaveDialog.FileName) then
      if (MessageDlg('Файл уже существует.' + #13#10 + 'Переписать?', mtConfirmation, mbOkCancel, 0) <> mrOk) then Exit;
    IniFile.IniOptions.SaveToFile(SaveDialog.FileName);
  end
end;


novashdima 12-02-2013 19:27 2088890

Цитата:

Цитата iMirRor
Если вы используете "Exit", то зачем столько "else", не проще было бы так: »

Да, спасибо, именно так я и хотел написать, но написал чуть по-другому, а потом что-то башка не варила, так и не сообразил.

opel431 13-02-2013 04:23 2089222

Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute...

novashdima 13-02-2013 06:37 2089238

Цитата:

Цитата opel431
Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute... »

Это как? сначала FileExist, а потом уже SaveDialog.Execute?
И что это за бред? Сначала проверка на существование файла(какого непонятно), а потом уже проверка выполнения SaveDialog?

opel431 13-02-2013 08:44 2089264

Цитата:

Цитата novashdima
И что это за бред? »

Бред, это когда мы заранее не определяем - что хотим, и как хотим.

novashdima 13-02-2013 17:15 2089627

Цитата:

Цитата opel431
Бред, это когда мы заранее не определяем - что хотим, и как хотим. »

Может я вас неправильно понял, объясните свою идею лучше, или код приведите

opel431 13-02-2013 21:45 2089859

Цитата:

Цитата novashdima
Может я вас неправильно понял, объясните свою идею лучше, или код приведите »

Не знаю..., может и неправильно, просто думаю, что изобретать велосипед не к чему.

1. SaveDialog имеет свойства, среди которых имеется OfOverwritePrompt. Установка его в true (в компоненте) или программно (SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]) вызывает стандартный диалог ("Файл уже существует. Заменить его?").
2. Файлы связанные с программой, при сохранении не нужно "тыкать" куда вздумается (или в папке с программой, или в папке "Пользователя" (что особенно актуально для работы в Windows 7 >), как и принуждать, каждый раз делать выбор (лучше предусмотреть выбор - "По умолчанию", или "Сохранить как..."). Свойств InitialDir и/или FileName для этого вполне хватает.
3. Проверять существование файла и выводить свой диалог, необходимо или при сохранении по умолчанию - без вызова SaveDialog, или при открытии файла.

novashdima 14-02-2013 01:04 2090019

Цитата:

Цитата opel431
1. SaveDialog имеет свойства, среди которых имеется OfOverwritePrompt. Установка его в true (в компоненте) или программно (SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]) вызывает стандартный диалог ("Файл уже существует. Заменить его?"). »

Спасибо, не знал, надо будет почаще проверять опции.
Цитата:

Цитата opel431
2. Файлы связанные с программой, при сохранении не нужно "тыкать" куда вздумается (или в папке с программой, или в папке "Пользователя" (что особенно актуально для работы в Windows 7 >), как и принуждать, каждый раз делать выбор (лучше предусмотреть выбор - "По умолчанию", или "Сохранить как..."). Свойств InitialDir и/или FileName для этого вполне хватает. »

По умолчанию при вызове диалогового окна предлагается сохранить в папке с программой.
Цитата:

Цитата opel431
3. Проверять существование файла и выводить свой диалог, необходимо или при сохранении по умолчанию - без вызова SaveDialog, или при открытии файла. »

Так и делаю, поэтому по привычке стал и в SaveDialog писать проверку на существование файла.

opel431 14-02-2013 08:58 2090109

Цитата:

Цитата novashdima
По умолчанию при вызове диалогового окна предлагается сохранить в папке с программой. »

Зачем? Вызов SaveDialog - это уже не по умолчанию, а выбор.
Добавьте переключатель (CheckBox) и обрабатывайте - или сохранение по умолчанию (с проверкой существования файла и запроса на его перезапись), или свобода выбора для пользователя - вызов SaveDialog.

novashdima 14-02-2013 14:08 2090304

Цитата:

Цитата opel431
Зачем? Вызов SaveDialog - это уже не по умолчанию, а выбор.
Добавьте переключатель (CheckBox) и обрабатывайте - или сохранение по умолчанию (с проверкой существования файла и запроса на его перезапись), или свобода выбора для пользователя - вызов SaveDialog. »

Ок, у меня свобода выбора - SaveDialog


Время: 19:36.

Время: 19:36.
© OSzone.net 2001-