Привет! Я хочу создать файл с выбранным расширением. Использую saveDialog. В лейбл вывожу имя файла, но файл не имеет расширения. Как из saveDialog'а вытащить выбраное расширение? Название файла ввел - "пример". И как создать файл в дельфи? assign и rewrite? или есть другие способы?
Надо вытягивать расширение из поля Filter и приклеивать его к имени файла. Вот пример:
procedure TForm1.Button1Click(Sender: TObject); var sL: TStringList; ix: Integer; begin if SaveDialog1.Execute() then begin sL := TStringList.Create; try ix := 2 * Pred(SaveDialog1.FilterIndex); ExtractStrings(['|'], [], PChar(SaveDialog1.Filter), sL); ShowMessage(SaveDialog1.FileName + Copy(sL[ix], 2, Length(sL[ix]) - 1)); finally sL.Free; end; end; end;
Цитата
И как создать файл в дельфи? assign и rewrite? или есть другие способы?
Да там способов - миллион... Можно заполнить данными тот же TStringList и потом записать его в файл (SaveToFile)... Все зависит от того, какой файл тебе нужен в результате, что он содержать должен.
ОГО, такой код мне и не снился Как сделать чтобы при попытке сохранить В УЖЕ существующий файл он выдавал запрос, т.е. не делать самому а с помощью WIN способов?
Ну, я бы сделал так: 1) выделяем тот код, который я привел выше для построения полного имени файла в отдельную функцию, и 2) вешаем обработчик на событие OnCanClose твоего SaveDialog-а:
function GetFullName(dialog: TSaveDialog): string; var sL: TStringList; ix: integer; begin sL := TStringList.Create; try ix := 2 * Pred(dialog.FilterIndex); ExtractStrings(['|'], [], PChar(dialog.Filter), sL); result := dialog.FileName + Copy(sL[ix], 2, Length(sL[ix]) - 1) finally sl.Free; end; end;
procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean); begin if FileExists(GetFullName(SaveDialog1)) then begin CanClose := MessageBox(0, PChar('Вы уверены, что хотите перезаписать файл?'), PChar('Warning'), MB_YESNO or MB_ICONEXCLAMATION or MB_DEFBUTTON2) = mrYes; end; end;
, тогда если будет введено имя существующего файла, ты получишь запрос, хочешь ли его перезаписать. И пока не подтвердишь перезапись или не введешь имя несуществующего файла, диалог не закроется...