Временные файлы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Временные файлы

Сообщение stikriz »

В win32 в своих проектах на Delphi я частенько использую такие функции:

Код: Выделить всё

function GetTempDirectory: string;
var TempPath: string;
begin
 SetLength(TempPath, MAX_PATH);
 GetTempPath(MAX_PATH, PChar(TempPath));
 Result:=Trim(TempPath);
end;

function GetTempName: string;
var TempFileName: string;
begin
 SetLength(TempFileName, MAX_PATH);
 FillChar(TempFileName[1], MAX_PATH, #0);
 GetTempFileName(PChar(TempDirectory),
                 PChar('sti'),
                 0,
                 PChar(TempFileName));
 Result:=Trim(TempFileName);
end;


И что-то никак не могу найти аналог GetTempFileName и GetTempPath в Linux... Может, кто подскажет?
Вообще, интересно было бы узнать где находятся параметры сеанса и пользователя.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

stikriz писал(а):И что-то никак не могу найти аналог GetTempFileName и GetTempPath в Linux... Может, кто подскажет?

Модуль SysUtils содержит кроссплатформенные функции GetTempDir и GetTempFileName
stikriz писал(а):Вообще, интересно было бы узнать где находятся параметры сеанса и пользователя.

Что под этим подразумевается?
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Что-то

Код: Выделить всё

function SysGetTempFileName(lpPathName:LPCSTR;
                            lpPrefixString:LPCSTR;
                            uUnique:UINT;
                            lpTempFileName:LPSTR):UINT;stdcall;external 'kernel32' name 'GetTempFileNameA'; 

Не производит ощущения кросплатформенности :-) В Linux версии Lazarus другие исходники? Где присваивается OnGetTempFile не нашел...
Может, у меня не все исходники?
Alexx2000 писал(а):stikriz писал(а):
Вообще, интересно было бы узнать где находятся параметры сеанса и пользователя.
Что под этим подразумевается?

Где десктоп, где so, куда устанавливать программу, где документы и т.д. Хотелось бы какое-то апи.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Модуль sysutils:

Код: Выделить всё

Function GetTempDir(Global : Boolean) : String;
Function GetTempDir : String;
Function GetTempFileName(Const Dir,Prefix : String) : String;
Function GetTempFileName : String;
{ For windows compatibility }
function GetTempFileName(Dir,Prefix: PChar; uUnique: DWORD; TempFileName: PChar):DWORD;
Function GetAppConfigDir(Global : Boolean) : String;
Function GetAppConfigFile(Global : Boolean) : String;
Function GetAppConfigFile(Global : Boolean; SubDir : Boolean) : String;
Function GetUserDir : String;
Function VendorName : String;
Function ApplicationName : String;
Аватара пользователя
stikriz
энтузиаст
Сообщения: 612
Зарегистрирован: 15.03.2006 08:37:47

Сообщение stikriz »

Спасибо, будем смотреть. Просто, по исходникам непонятно, что оно будет компилиться и там и там.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

stikriz писал(а):Что-то ... Не производит ощущения кросплатформенности :-) В Linux версии Lazarus другие исходники?
Да, другие. Разделение, как правило, идёт на уровне include-файлов. Т.е. в секции interface модуля -- общее объявление для всех платформ, в implementation подключаются include-файлы, а пути к этим файлам зависят от платформы и виджетсета.
stikriz писал(а):Где десктоп, где so, куда устанавливать программу, где документы и т.д. Хотелось бы какое-то апи.
Существующего кроссплатформенного апи, насколько я знаю, нет. Под Windows для этого есть SHGetSpecialFolderLocation или в крайнем случае переменные окружения, под Linux -- переменные окружения и стандарты freedesktop.org и LSB (для дистрибутивов и DE которые им следуют).
Думаю, если кто-нибудь напишет кросплатформенный wrapper API для всего этого хозяйства и выложит в Lazarus CCR под modified LGPL -- сообщество будет ему благодарно :) Код там должен быть несложный -- вызовы функций, чтение переменных окружения и разбор конфигов. Вся сложность в том, чтобы узнать имена функций, параметры и самое страшное -- расположение конфигов, которые нужно парсить.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

stikriz писал(а):Где десктоп, где so, куда устанавливать программу, где документы и т.д. Хотелось бы какое-то апи.

Есть такой файлик в "$HOME/.config/user-dirs.dirs", в нем указаны путь к рабочему столу, моим документам и т.д. Правда не знаю все ли DE/дистрибутивы придерживаются этого правила.
Ну а расположение *.so и куда правильно устанавливать программу в UNIX-подобных системах описывается стандартом Filesystem Hierarchy Standard
Odyssey писал(а):Думаю, если кто-нибудь напишет кросплатформенный wrapper API для всего этого хозяйства и выложит в Lazarus CCR под modified LGPL -- сообщество будет ему благодарно

Кажется что-то похожее выкладывали где-то на официальном форуме Lazarus или в списке рассылки пробегало.
Ответить