• ベストアンサー

パス名の変換

フォルダ選択ダイアログで取得したパス名 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

  • ExcelVBAで前後のパスとパス名を取得したい。

    Excel2000のVBAで現在いるフォルダの前後のフォルダ名とパス名を取得したいです。(できればさらに何階層か前後のフォルダも)取得できる関数はありますでしょうか。無ければ何かいい方法を教えてほしいです。お願いします。

  • 共有フォルダ名のパスの取得

    お世話になります。 C++ 6.0 MFCで開発しております。 自分の共有フォルダ名から、その共有フォルダのパスを取得したいのですが それができるような関数はあるのでしょうか? 大変お手数ですが、何卒よろしくお願いします。

  • SHGetPathFromIDList によるパス取得

    IShellFolder によって、ある LPCITEMIDLIST から SHGetPathFromIDList を利用してパスを取得しようとしているのですが、意図したパス情報が返されないので困っています。 詳細 SHBrowseForFolder で呼び出せるフォルダ選択ダイアログのような フォルダ選択画面を作成しています(諸事情がありフォルダ選択ダイアログが使えません)。 そこで次のサイト http://hp.vector.co.jp/authors/VA016117/winsdk.html を参考に、ユーザーが選択したフォルダのパスをSHGetPathFromIDList を呼び出して取得しようとしているのですが、なぜか例えば "D:\test" は "C:\Documents And Setting\user_name\デスクトップ\test" として返されるため、次の段階のディレクトリのオープン処理(FindFirstFile)に失敗してしまいます。 SHBrowseForFolder のようにドライブレターから始まるパスを取得するにはどうすればいいのでしょうか。

  • 指定フォルダの絶対パス取得

    初歩的なことですが教えてください。 VB.netにて、指定したフォルダの相対パスに対する絶対パスの取得を行いたいのですが、良い方法が見つかりません。 「Path.GetFullPath メソッド」を使用して見ましたが、存在しないパス「例:\A\」を指定すると、勝手に「例:C:\A\」のように絶対パスが割り付けられてしまいます。実際に存在するパスを検索して取得することは出来ないのでしょうか? 例:「ABC」というフォルダが「C:\program files」や「D:\」などに存在するという結果です。

  • パス名を調べるには?

    VBをやってるんですが、エクセル上でクリックすると別のフォルダを開くように作っています。プログラムは一応なんとかできたんですけど、パス名を指定しなくてはいけないところでパス名の全部がわからなくて困っています。 どうやって調べるんですか?お願いします。

  • エクセルのフルパスをvbaで取得

    当方エクセル2003で、 エクセルのフルパスは C:\Program Files\Microsoft Office\OFFICE11\ EXCEL.EXE です。 それをVBAで取得するにはどうすればいいですか? Sub サンプル() Debug.Print 'オフィスがインストールされているフォルダのパスの取得 End Sub のようにして、 C:\Program Files\Microsoft Office\OFFICE11\ EXCEL.EXE を返したいです。 VBAコードをご教示ください。

  • フォルダ名のフルパスからファイルポインタ

    C言語の初心者で、なにがなんだかわかりません。 ファイル入出力関数の話ですが、 フォルダ名のフルパスを指定された関数内で ファイルポインタを指定して他関数を使用します。 そもそもフォルダ名のフルパスからファイルポインタを 得ることができるのでしょうか?

  • ACCESSからEXCEL起動時、パス名は短い名前でないといけないの?

    ACCESS2003からEXCEL2003をVBAで起動するコードを書いてます。 SetApplName = "c:\Program Files\Microsoft Office\office11\excel.exe /r c:\docume~1\alluse~1\docume~1\毎日の数字.xls" Call Shell(SetApplName, 1) のように指定していますが、いちいち短い名前を指定しないと いけないようで、面倒で困っています。 長いパス名を短いパス名に変換するような関数等はありませんか? 他にもっと簡便な方法があればあわせてご教示ください。

  • パスからファイル名を抽出

    度々お世話になります。 C++でファイルパスからファイル名を求めるには どのようにすればよいでしょうか? 例) "C:\Program Files\Folder1\FileName.txt"という 文字列からFileName.txtだけを抽出したい 初心者で申し訳ないですが、ご教示ください。

  • インストールについて教えてください。

    WindowsXPにアプリケーション(会計王5)をインストールついて教えてください。 初期設定ではインストーラーに従うとC:\AAC5というフォルダを作成してインストールします(正常にインストールされます)。 個人的にアプリケーションはProgram Filesにまとめてインストールしたいので、Program FilesにAAC5フォルダを作成し、インストール時にそのフォルダを選択してインストールしようとすると、エラーダイアログが発生します。 インストール時のフォルダ選択ダイアログでC\C:\Program Files\ACC5を選択すすると、C:\program filse\acc5のように小文字で表示されます。このあたりが原因かとも思い、手入力で下記のような文字列を試してみましたがだめでした。 C:\Program Files\ACC5 "C:\Program Files\ACC5" C:\"Program Files"\ACC5 "C:\program files\acc5" C:\"program files"\acc5 C:\ACC5には問題なくインストールできるので個人的好みなのですが、できればProgram Filesにインストールできればと思っています。 解決方法がありましたら教えてください。