Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

Сохранение *.Ini в том жэ каталоге, где находится сама программа   Найти похожие ветки 

 
Delphin   (2003-06-16 14:13) [0]

Доброго времени суток, народ, такая проблема: как мне сохранить *.Ini файл в том жэ каталоге, где находится сама программа?


 
Andrews   (2003-06-16 14:22) [1]

var
CDBEditorIni : TIniFile;
IniFileName : String; //Имя ини-файла
begin
IniFileName := ExtractFileDir(ParamStr(0)) + "\CDB_Editor.ini";
CDBEditorIni := TIniFile.Create(IniFileName);
CDBEditorIni.WriteInteger("Position", "MainForm.Height",MainForm.Height);
...
end;


 
Palladin   (2003-06-16 14:23) [2]

тэбэ, дарагой, надо явно указать этот каталог при создании TIniFile


 
sergey2   (2003-06-16 14:29) [3]

Пока делаю так: определяю путь где находится прога и к ini файлу обращаюсь с использованием этого пути.
Но твой вопрос меня тоже интересует.
И вообще, если не указывать путь, то какой путь используется по умолчанию?


 
Delphin   (2003-06-16 14:30) [4]

Спасибо =)


 
Delphin   (2003-06-16 14:32) [5]

>> То sergey2 <<
Не уверен, но по умолчанию используеться C:/Windows


 
sergey2   (2003-06-16 14:37) [6]

Хм. Пока писал, тут уже куча ответов есть. :)
Значит все-таки нужно определять где находится прога и использовать этот путь? Думал что может есть вариант по-проще...


 
Andrews   (2003-06-16 14:42) [7]

>> sergey2 (16.06.03 14:37)
Значит все-таки нужно определять где находится прога и использовать этот путь? Думал что может есть вариант по-проще...

IniFileName := ExtractFileDir(ParamStr(0)) + "myini.ini"; //очень сложный код...

да уж...


 
sergey2   (2003-06-16 14:58) [8]

да нет, не сложный. Просто я пользовался именно таким способом, но мне все время казалось что я что-то не так делаю или чего-то не знаю. Наверное просто была навязчивая идея. :(


 
Opera   (2003-06-16 15:39) [9]

var
f:textfile;
begin
AssignFile(f, "*.ini");
Rewrite(f);
CloseFile(f);


 
panov   (2003-06-16 18:37) [10]

function IniName:String;
var
Len: Integer;
begin
Result := ParamStr(0);
Len := Length(Result);
Result[Len] := "i";
Result[Len-1] := "n";
Result[Len-2] := "i";
end;


 
mrcat   (2003-06-16 19:28) [11]

>panov © (16.06.03 18:37)

оригинально :)


 
Юрий Зотов   (2003-06-16 19:34) [12]

> panov © (16.06.03 18:37)

Result := ChangeFileExt(ParamStr(0), ".ini");

Пожалуй, попроще...
:о)


 
Anatoly Podgoretsky   (2003-06-16 21:00) [13]

А система то ХР это означает, что сия операция как правило разрешена только администратору, если конечно права не изменены.


 
panov   (2003-06-16 21:25) [14]

>mrcat © (16.06.03 19:28)
>Юрий Зотов © (16.06.03 19:34)

Функция специально сделана для использования в DLL, поэтому и такой метод - без использования SysUtils
-)


 
Vladymir   (2003-06-18 23:32) [15]

А ваще-то прг по умолчанию пишет в свой каталог "любой.ini".
А dll можно тоже в каталог программы поместить. А каталог разрешить на запись Guest"у. А вообще-то и проблемы вроде нет...


 
Palladin   (2003-06-19 00:28) [16]


> Vladymir (18.06.03 23:32)

Вы такой опытный разработчик, от Вас так и прет опытом


 
iFot   (2003-06-19 02:32) [17]

А такой способ:


var
IniFile:TINIFile;
begin
IniFile:=TINIFile.Create(ExtractFilePath(Application.ExeName)+"sample.ini");
....
IniFile.Free;
end.


Если у него есть какие-нибудь недостатки в отличии от других - объясните, плз, новичку.


 
Armen   (2003-06-19 02:39) [18]

IniFile:=TINIFile.Create("./inifilename");

начиная с текущего каталога


 
Rol   (2003-06-19 07:49) [19]

Удалено модератором


 
Palladin   (2003-06-19 08:30) [20]


> iFot © (19.06.03 02:32)

недостаток есть, Application есть не в каждой программе

IniFile:=TINIFile.Create(ExtractFilePath(ParamStr(0))+"sample.ini");


 
iFot   (2003-06-19 12:42) [21]

//Palladin ©
Спасибо, понял


 
vv3   (2003-06-20 03:17) [22]

>>Palladin (19.06.03 00:28)

procedure Palladin;
var F: TMemIniFile; SL: TStringList;
begin
Sl:= TStringList.Create;
Sl.Clear;
Sl.LoadFromFile("aga.ini");
f:= TMemIniFile.Create("aga.ini");
f.SetStrings(SL);
f.WriteString("Наш ответ Чемберлену", "Palladin", "Вы такой опытный разработчик..");
f.GetStrings(SL);
f.Free;
SL.SaveToFile("aga.ini");
SL.Free;
end;





 
Palladin   (2003-06-20 08:42) [23]


> vv3 © (20.06.03 03:17)

Да Вы я смотрю вообще опытный...
а если я запущу Ваш код с текущей директорией c:\temp\?
где по Вашему ini файл создастся?

И не надо заниматся извратом...


 
Palladin   (2003-06-20 08:51) [24]


> Vladymir (18.06.03 23:32)


Note: Typically, INI files are stored in the \WINDOWS directory or the application’s directory. To work with an INI file in another location, specify the full path name of the file in FileName.


 
FoxBox   (2003-06-20 09:42) [25]

Чтобы избежать проблем с доступом к каталогу,
используй реестр (объект TRegIniFile).
То же самое, что и TIniFile, только пишется в
реестр. Как работать - читай хелпер


 
Nucl   (2003-06-20 09:43) [26]

var Path : string;
Path := ExtractFilePath(Application.ExeName);
добавляеш имя ини файла
и сохраняешь.


 
Vladislav   (2003-06-20 10:37) [27]

Есть один косяк в вышеописанных методах. Раньше я сам пользовался Path := ExtractFilePath(Application.ExeName), пока не наступил на грабли, если вызываешь свою пргу как OLE-сервер.
Рабочий каталог в это случае Windows (или W/System) и есть параметр -Embedding

В следствии чего приучил себя делать так:
var P: array[ 0..MAX_PATH-1 ] of Сhar;
Path: string;
begin
SetString( Path, P, GetModuleFileName( hInstance, SP, SizeOf( P )));
Path := ExtractFilePath( Path );
end;

Может кому-то и покажется, что мутно, но меня пока не подводило.



 
Palladin   (2003-06-20 10:41) [28]


> Vladislav © (20.06.03 10:37)


function ParamStr(Index: Integer): string;
{$IFDEF MSWINDOWS}
var
P: PChar;
Buffer: array[0..260] of Char;
begin
Result := "";
if Index = 0 then
SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer)))
else
begin
P := GetCommandLine;
while True do
begin
P := GetParamStr(P, Result);
if (Index = 0) or (Result = "") then Break;
Dec(Index);
end;
end;
{$ENDIF}
{$IFDEF LINUX}
begin
if Index < ArgCount then
Result := PCharArray(ArgValues^)[Index]
else
Result := "";
{$ENDIF}
end;



 
panov   (2003-06-20 10:41) [29]

>FoxBox (20.06.03 09:42)

Чтобы избежать проблем с доступом к каталогу,
используй реестр (объект TRegIniFile).


Вот так и пишутся программы, которые потом проклинают пользователи - после того, как они реестр весь загадят.


 
Palladin   (2003-06-20 10:48) [30]


> Palladin © (20.06.03 10:41)

не обращайте внимания, ступил...


 
Sliski Slimak   (2003-06-20 22:30) [31]

а если ини валяется в папке с программой, и она автозапускается из реестра, тогда что? прога вылетает с ошибкой- не найден файл....


 
Sha   (2003-06-20 23:25) [32]

Sliski Slimak (20.06.03 22:30)
указывай полный путь



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.025 c
6-7567
andrew_snk
2003-04-25 23:36
2003.07.03
Определение заголовка сайта


14-7708
Delirium
2003-06-17 16:05
2003.07.03
C# Builder vs VS.Net 2003


14-7651
Дмитрий Белькевич
2003-06-15 21:17
2003.07.03
MPL 1.1 - шо за зверь?


14-7712
SiJack
2003-06-17 14:00
2003.07.03
Не могу сочинять хелпы, ОТМОРАЖИВАЮСЬ !!!


14-7634
RelaXXX
2003-06-14 00:41
2003.07.03
Oracle???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский