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

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

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

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

Сообщение stikriz » 13.11.2010 10:58:23

В 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... Может, кто подскажет?
Вообще, интересно было бы узнать где находятся параметры сеанса и пользователя.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

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

Сообщение Alexx2000 » 13.11.2010 12:25:31

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

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

Что под этим подразумевается?
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 489
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

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

Сообщение stikriz » 13.11.2010 12:58:23

Что-то
Код: Выделить всё
function SysGetTempFileName(lpPathName:LPCSTR;
                            lpPrefixString:LPCSTR;
                            uUnique:UINT;
                            lpTempFileName:LPSTR):UINT;stdcall;external 'kernel32' name 'GetTempFileNameA'; 

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

Где десктоп, где so, куда устанавливать программу, где документы и т.д. Хотелось бы какое-то апи.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

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

Сообщение Mr.Smart » 13.11.2010 13:23:26

Модуль 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;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение stikriz » 13.11.2010 14:57:35

Спасибо, будем смотреть. Просто, по исходникам непонятно, что оно будет компилиться и там и там.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

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

Сообщение Odyssey » 13.11.2010 14:59:47

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

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

Сообщение Alexx2000 » 13.11.2010 15:14:15

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

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

Кажется что-то похожее выкладывали где-то на официальном форуме Lazarus или в списке рассылки пробегало.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 489
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru