2015-11-30 2 views
1

Если я использую этот код DelphiКак получить абсолютный путь к файлу INI с помощью Delphi?

with TIniFile.Create('myapp.ini') do 
try 
    WriteString('SETTINGS', 'key', 'value'); 
finally 
    Free; 
end; 

создать файл INI в папке по умолчанию, есть способ, чтобы получить абсолютный путь, который используется Windows, для создания файла?

+0

Почему вы не устанавливаете путь по умолчанию так же, как и путь приложения? Например, используя 'TIniFile.Create (changefilext (paramstr (0), '. Ini'))' поместит ваш ini-файл в ту же папку, что и ваш исполняемый файл. – theodorusap

+1

@ theodorusap и ломать все правила относительно UAC? – whosrdaddy

+1

Вы, конечно, делаете все это неправильно. Вы действительно должны прекратить помещать файлы в каталог Windows или полагаться на виртуализацию. На самом деле, вы действительно должны прекратить использовать устаревшие API совместимости Win16 назад. Не спрашивайте, что такое полный путь, укажите полный путь. И переключитесь на 'TMemIniFile'. –

ответ

0

В фоновом режиме TInifile.WriteString использует функцию WritePrivateProfileString.

из документации (курсив):

BOOL WINAPI WritePrivateProfileString( _In_ LPCTSTR lpAppName, 
    _In_ LPCTSTR lpKeyName, _In_ LPCTSTR lpString, 
    _In_ LPCTSTR lpFileName); 

lpAppName [в]

Название секции, к которой строка будет скопирован. Если раздел не существует, он создается. Название раздела: не зависит от случая; строка может быть любой комбинацией прописных и строчных букв.

lpKeyName [in] Имя ключа, подлежащего связыванию со строкой. Если ключ не существует в указанном разделе, создается . Если этот параметр равен NULL, весь раздел, включая , все записи в этом разделе удаляются.

lpString [in] Строка с нулевым завершением, которая должна быть записана в файл. Если этот параметр равен NULL, ключ, на который указывает параметр lpKeyName , удаляется.

lpFileName [in] Имя файла инициализации. Если файл был , созданный с использованием символов Unicode, функция записывает в файл символы Unicode . В противном случае функция записывает символы ANSI .

Если параметр lpFileName не содержит полный путь и имя файла для файла, WritePrivateProfileString выполняет поиск в каталоге Windows файла. Если файл не существует, эта функция создает файл в каталоге Windows.

Этот последний комментарий подразумевает, что ваша программа должна запускаться как администратор. Логическим следствием является то, что если ваша программа не запускается как администратор, путь по умолчанию будет C:\Users\Windows username\AppData\Local\VirtualStore\Windows. Итак, чтобы соблюдать современные правила Windows, лучше всего предоставить полный путь для ini-файла ...

+2

' Последнее замечание означает, что ваша программа должна быть запущена как administrator' - если приложение не работает, например, в среде служб терминалов, отображающая (некоторые) файлы в виртуальный каталог Windows, – mjn

+1

@mjn см мое последнее обновление – whosrdaddy

Смежные вопросы