• ベストアンサー

パス名の変換

フォルダ選択ダイアログで取得したパス名 ex.c:\program files を関数で使おうとすると c:\\program files に直すようだと分かったのですが 何かいい関数、もしくは方法はないでしょうか? よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • meruty
  • ベストアンサー率81% (9/11)
回答No.2

FindFirstFile()だけでなく、パスを文字列として受け取る関数全般に言えることと思いますが、C言語では「\」記号をはじめ、いくつかの文字はエスケープシーケンスといって特殊な意味を持ち、見たままの意味でそれらの文字を使いたい場合には「\」記号を重ねて、「\\」のように書くというルールがあります。 もしプログラム内でパスをハードコーディング(ベタ書き)しているなら、 FindFirstFile("c:\\program files\\test\\a.txt",.... のように書かなければコンパイルエラーです。 プログラム内で以下のように処理しているなら問題ないと思います。 1)パスを受け取るchar型変数の配列を宣言。 2)char配列へファイル選択ダイアログから返されたパスを受け取る。 3)char型変数を引数にしてFindFirstFile()を使う。

crimsongod
質問者

お礼

理由のご説明、解決の方法の提示ありがとうございますm(_)m 言われたようにやってみたのですが、だめでした ためしにchar配列のbufを宣言し"C:\121ware\test.txt"というパスを入れて FindFirstFileにいれてみたのですが、戻り値で失敗で "C:\\121ware\\test.txt"に変更してみたところ通りました

crimsongod
質問者

補足

すいません、で。できてましたOTL もういちど確認しなおしてましたらFindFirstFileの第二引数に別のものが・・・・ ほんと申し訳ない。 けれどおかげで無事解決することができました ありがとうございました

その他の回答 (1)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> c:\program files を関数で使おうとすると > c:\\program files に直すようだと分かったのですが 普通はそんな必要は無いです。 なぜ、そう思ったのでしょうか? 直したいのなら、「\」→「\\」に置換とかが一般的では?

crimsongod
質問者

補足

ファイル検索のAPI FindFirstFile の引数としてそのパス名をいれたのですが エラーがでてしまって、\を\\にしたら直ったのです。 それとこちらのところでもそのことについて書いてありましたので ttps://www.ipa.go.jp/security/awareness/vendor/programming/b08_01_main.html そう考えました。 他の方の回答も参考にさせてもらいつつ考えてみます ありがとうございましたm(_)

関連するQ&A