TPicture.SaveToFile(const Filename: string; const FileExt: string = '');
Видно что можно параметр FileExt не задавать по умолчанию он пуст. И вроде бы все ок. Но вот если я принудительно его задаю, то при сохранении файла это расширение к имени файла не прибавляеться.
Т.е. SaveToFile('C:\1.jpg') Сохранит картинку в файл C:\1.jpg,
а вот SaveToFile('C:\1','jpg') Сохранит картинку в файл C:\1 , а как же расширение?? jpg.
При рассмотрении процедуры:
- Код: Выделить всё
procedure TPicture.SaveToFile(const Filename: string; const FileExt: string = '');
var
Ext: string;
Stream: TStream;
begin
if FileExt <> '' then
Ext := AnsiLowerCase(FileExt)
else
Ext := AnsiLowerCase(ExtractFileExt(Filename));
if (Ext <> '') and (Ext[1] = '.') then System.Delete(Ext, 1, 1); // delete '.'
Stream := TFileStream.Create(UTF8ToSys(Filename), fmCreate); //Забыли про расширение если оно задано
try
SaveToStreamWithFileExt(Stream, Ext);
finally
Stream.Free;
end;
end;
Переписал вот так:
- Код: Выделить всё
procedure TPicture.SaveToFile(const Filename: string; const FileExt: string = '');
var
Ext,Name: string;
Stream: TStream;
begin
if FileExt <> '' then
begin
Ext := AnsiLowerCase(FileExt);
Name:= Filename+'.'+Ext;
end
else
begin
Ext := AnsiLowerCase(ExtractFileExt(Filename));
if (Ext <> '') and (Ext[1] = '.') then System.Delete(Ext, 1, 1); // delete '.'
Name:= Filename;
end;
Stream := TFileStream.Create(UTF8ToSys(Name), fmCreate);
try
SaveToStreamWithFileExt(Stream, Ext);
finally
Stream.Free;
end;
end;
Теперь в обоих случаях расширение прописываеться... Но может быть я не прав и оно не должно прописываться. Подскажите.