INIファイルで相対パスを設定する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
オカピーα
記事: 120
登録日時: 13年前

INIファイルで相対パスを設定する

#1

投稿記事 by オカピーα » 13年前

こんにちは。
今フリーソフトを制作しているのですが、そこでINIファイルを利用しています。
INIファイルは非常に便利で重宝しているのですが、
WritePrivateProfileString関数の第4引数(ファイル名を指定する引数)
を相対パスで指定すると書き込めません。
しかし、絶対パスで指定するとかけます。
フリーソフトとして配布する予定をしているので絶対パスで指定することは出来ません
なんとか相対パスとして指定する方法はないでしょうか?
どなたか教えてください。

言語はWin32API、OSはWindowsXP、コンパイラはVC++ 2008です。
C,C++,C#,これらを極めることを「3C政策」と言う

オカピーα
記事: 120
登録日時: 13年前

Re: INIファイルで相対パスを設定する

#2

投稿記事 by オカピーα » 13年前

申し訳ないです!
調べた結果、パスを「.\\」と指定すればいいことがわかりました!
INIファイルの仕様を疑っていた僕は本当に馬鹿でした!
申し訳ないです!ごめんなさい!
C,C++,C#,これらを極めることを「3C政策」と言う

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: INIファイルで相対パスを設定する

#3

投稿記事 by softya(ソフト屋) » 13年前

オカピーα さんが書きました:申し訳ないです!
調べた結果、パスを「.\\」と指定すればいいことがわかりました!
INIファイルの仕様を疑っていた僕は本当に馬鹿でした!
申し訳ないです!ごめんなさい!
どういう配布をするのかわかりませんが、Program Files下にINIファイルを作ることはマイクロソフト非推奨の使い方なので注意してくださいね。
特にVista以降だとまともに動かな可能性があります(一見まともに動くから厄介です)。
作業フォルダを取得する専用の手続きがあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: INIファイルで相対パスを設定する

#4

投稿記事 by YuO » 13年前

GetLastErrorの戻り値は何ですか。
WritePrivateProfileStringはエラーがあった場合は0を返し,詳細な情報はGetLastErrorから得ます。

相対パスが書けない,ということはないと思いますが。

コード:

#include    <windows.h>

int main (void)
{
    // カレントディレクトリの確認
    WCHAR buffer[512];
    ::GetCurrentDirectoryW(512, buffer);
    lstrcatW(buffer, L"\r\n");
    OutputDebugStringW(buffer);

    BOOL result = ::WritePrivateProfileStringW(L"test", L"key", L"value", L".\\test.ini");
    if (!result)
    {
        return ::GetLastError();
    }
    return 0;
}
で,ちゃんとtest.iniがカレントディレクトリにできていました。
ちなみに,L"test.ini"とした場合,C:\Windowsに作られるため,C:\Windowsへの書き込み権限を持ったユーザーのみ利用可能になります。
# GetLastError()は5 : ERROR_ACCESS_DENIEDを返します。

ただ,カレントディレクトリに依存する作りにするとそこら中にiniファイルをばらまくことになるほか,ユーザーごとの設定ができなくなるので,
iniファイルを使うならばSHGetFolderPathCSIDL_LOCAL_APPDATAまたはCSIDL_APPDATAを与えて得たパスにディレクトリを作り,そこに保存するのがよいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る