Войти

Показать полную графическую версию : [решено] Сохранение в файл


novashdima
11-02-2013, 15:35
Делал так, файл не перезаписывался, хотя имхо должен:

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
но почему в начальном варианте не работает? »
Код начального варианта?

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

novashdima
11-02-2013, 15:51
Код начального варианта? »
Это и есть начальный вариант, потом я добавил функцию в указанное место.
Может вы попросту забыли поставить после end ";"? »
Перед else точка с запятой не ставится

LilLoco
11-02-2013, 16:32
Перед else точка с запятой не ставится »
В начальном варианте же у вас нет вроде бы else.Вставил ветку else и туда написал

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

Либо вы вставили здесь then Exit; end »
Выражайтесь понятнее, пожалуйста.

novashdima
11-02-2013, 16:40
эх.... ок, вот начальная процедура

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
ведь в любом случае последняя строка должна выполняться в любом случае... »
Это вот эта чтоли:
else IniFile.IniOptions.SaveToFile(SaveDialog.FileName); »
С чего это она в любом случае должна выполняться? Только если файл не существует.
Вот во втором варианте вы вписали сохранение файла и в ту ветку, которая выполняется при существовании файла, поэтому у вас и начало работать.

novashdima
11-02-2013, 17:16
С чего это она в любом случае должна выполнятся? Только если файл не существует. »
Хм... действительно провтыкал...

iMirRor
12-02-2013, 15:03
Если вы используете "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
Если вы используете "Exit", то зачем столько "else", не проще было бы так: »
Да, спасибо, именно так я и хотел написать, но написал чуть по-другому, а потом что-то башка не варила, так и не сообразил.

opel431
13-02-2013, 04:23
Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute...

novashdima
13-02-2013, 06:37
Ну да...., не проще ли, блок if not (FileExists(..))..., а в нем if SaveDialog.Execute... »
Это как? сначала FileExist, а потом уже SaveDialog.Execute?
И что это за бред? Сначала проверка на существование файла(какого непонятно), а потом уже проверка выполнения SaveDialog?

opel431
13-02-2013, 08:44
И что это за бред? »
Бред, это когда мы заранее не определяем - что хотим, и как хотим.

novashdima
13-02-2013, 17:15
Бред, это когда мы заранее не определяем - что хотим, и как хотим. »
Может я вас неправильно понял, объясните свою идею лучше, или код приведите

opel431
13-02-2013, 21:45
Может я вас неправильно понял, объясните свою идею лучше, или код приведите »
Не знаю..., может и неправильно, просто думаю, что изобретать велосипед не к чему.

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

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

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

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




© OSzone.net 2001-2012