• ベストアンサー

アプリケーションは自分のパスをどこに保存するのか?

ファイルを読み込むアプリケーションを作成しているのですが、その際にファイルを相対パスで指定しています。 アプリケーションは自分の絶対パスを知らないと相対パスを指定出来ないと思うのですが、アプリケーションはどこにどのような形で自分の絶対パスを保存しているのでしょうか? プログラムで絶対パスの取得は出来ているのですが、取得した絶対パスを細工して保存してる変数に代入してパスを偽装したいのです

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

  • ベストアンサー
  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.5

プログラムで絶対パスの取得…ですが、どうやって行っていますか?使用している言語が分かりませんが、GetCurrentDirectory APIでカレントディレクトリを取得できます。 http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_getcurrentdirectory.htm

otopy77
質問者

お礼

回答ありがとうございます。 アプリケーションから絶対パス取得は出来ていたので取得したパスをSetCurrentDirectory()関数に渡すことでFlashから起動した場合でも相対パスを使えるようになりました。 ありがとうございました。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

flash のことはよく知らないのですが、 アプリケーションは、一般的に自分のパスを保存とかは、しません。 相対パスの基準になるのは、一般的にはカレントディレクトリ(フォルダ)です。 そのような場合は、カレントディレクトリをアプリケーションの絶対パスに移動させてから相対パス指定するといいかと思います。

otopy77
質問者

お礼

回答ありがとうございます。 アプリケーションから絶対パスを取得して、そのパスをSetCurrentDirectory()に渡すことでFlashから起動した場合でも相対パスを使えるようになりました。 ありがとうございました。

  • 0KG00
  • ベストアンサー率36% (334/913)
回答No.3

よく意味が解らないのですが... 取得した絶対パスとファイル名を結合すれば絶対パスのファイル名を取得でき、それでアクセスすればよいのでは。 ひょっとして、すでに相対パスで読むようにプログラムを作りこんでいて、動かないが直すには修正点が多すぎるという事でしょうか?それはファイルパスを取得する部分を部品化しておかなかった方が悪いですね。 あとは言語系にもよりますが、ホームディレクトリ(作業ディレクトリ)を変更する命令をサポートするものがありますね。それでファイルが存在するディレクトリに作業ディレクトリを移動しておけばよいかもしれません。

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_directory_control.asp
otopy77
質問者

お礼

回答ありがとうございます。 現状は取得した絶対パスと相対パスを結合して対処していますが、修正するプログラムが多いのと他人のソースなので抜本的な対策がとりたいなぁと思った次第です

  • ok2ok
  • ベストアンサー率38% (97/255)
回答No.2

 OSがアプリケーションを起動するとき、アプリケーションに対して変数としてアプリケーションのファイル名やパスを与えます。  アプリケーション側からしてみれば、「OSから自分の絶対パスを教えてもらえる」ということです。アプリケーション自身が(プログラマがプログラミングしなくても)自分の絶対パスをどこかに保存していると言うことはありません。アプリケーションが自分の絶対パスをどこかに保存したいなら、プログラマがそのようにプログラミングするしかありません。  パスを偽装云々については、ご質問の意味がよくわからないので、お答えしようがありません。

otopy77
質問者

お礼

回答ありがとうございます。 OSから絶対パスを教えてもらえると言うことですが、起動時に教えてもらえるのではなく、例えばfopen()を呼んだときに自動的に補完されるという感じでしょうか? パスの偽装ですが、実はアプリケーションをFlashPlayerから起動すると全く絶対パスを教えてもらえずアプリケーションから相対パスでファイルを読みに行くと必ず失敗してしまいます。そのためAPIで絶対パスを調べて絶対パスに変換してから読んでいるのですが修正個所が膨大な為、絶対パスを保存しているシステム変数などがあれば、そこに書き込む事によってダブルクリックから起動されたように偽装できないかな?と思った次第です

  • 0KG00
  • ベストアンサー率36% (334/913)
回答No.1

絶対パスを知らないと相対パスを知る事ができないというのは間違いですよ。 .\ これが相対パスでの自分のディレクトリを示しますよね。絶対パスがどのディレクトリにあるのかは関係ありません。 >パスを偽装したい 意味が解りません。どのような目的でしょうか?

otopy77
質問者

お礼

回答ありがとうございます。 偽装の意味ですが、ちょっと起動が特殊でして FlashPlayerからアプリケーションを起動するとアプリケーションは自分のポジションを全くOSから知らせてもらえず、そのアプリケーションから相対パスでファイルを読みに行っても必ず失敗します。その為APIでアプリケーションの絶対パスを調べて相対パスを絶対パスに補完して読むしかないのです。アプリケーションが自分のポジションを覚えておくシステム変数などがあるのならば、そこをAPIで調べた絶対パスで偽装することによって上書きすることでダブルクリックで起動したのと同じ状態に出来ないかな?と思った次第です

関連するQ&A

  • 絶対パス、相対パス、環境変数の概念が掴めない

    絶対パス相対パス環境変数についていまいち概念が掴めないのでどなたかご教示いただけないでしょうか? 絶対パスというものは指定のフォルダなどへの行き道をしていしたもの、相対パスはある程度のものだけきじゅつしてあるしか認識できておりません。 ググって探してみてもいまいちいい内容がなくて・・・ 何かいい知識の身につけ方があったら教えてください。 あと例えばCGIを使うためにActivePerlなどを入れたときに絶対パスで指定する方法があるとか言うのはどういった意味なのでしょうか?

    • ベストアンサー
    • Perl
  • あるアプリケーションがインストールいるパスを知る方法

    あるアプリケーションがインストールされているかどうか知りたい場合 そして、インストールされている場合には そのパスを知りたいのですが 今、思っているのは そのアプリケーション独自の拡張子のファイルを扱う場合 関連付けられているアプリケーションのパスを取得する APIのFindExecutable で、いけますよね? このほかに コントロールパネルの「プログラムの追加と削除」(XPの場合) にあるアプリケーションの中に 調べたいアプリケーションがあるかどうか見て パスも取得できないかな と思ったのですが これはどうすればできるでしょうか? 別に言語はC以外でもいいのですが… よろしくお願いします

  • javascriptでのパスについて

    javaScript初心者です。 firefox3.5を使っています。 最近、プログラムを組んでいたのですが 絶対パスや相対パスをあまり意識しないでプログラムを書いていました。 プログラム中では document.getElementById(a).src = "画像.jpg"; のように代入していたのですが ふと絶対パスや相対パスはどうなっているのだろうと不安になり alert(document.getElementById(a).src); のようにalertで表示させてみると絶対パスが入っていることがわかりました。 インターネットで検索してみたところIEでは どうやらバグとして認知されているようなのですが (参考:http://css-bug.jp/win/ie/ver6_under/0043/)、 FireFoxでも同じようなことがあるのですか? 中で変換されているのでしょうか? どういった仕組みになっているのか教えてください。 そして相対パスと比較を行うときにはどのように比較することができるでしょうか。 いまはファイルの文字数がはっきりしているのでfor文の中で document.getElementById(i).src.slice(-9) == file + i + ".jpg" のように行っていますが、もっとよい方法がありますか? 初歩的な質問かもしれませんがよろしくお願いします。

  • 相対パスでExcel Bookのオープン

    こんにちわ。 相対パスでブックをオープンしようとすると、 「オブジェクト変数、またはwithブロック変数が設定されていません。」というエラーが表示されてしまいます。 絶対パス指定だと、正常にオープンできますし、同じ相対パス指定で、ブックのコピー&ペーストもできています。 なぜなのでしょうか?

  • VB6.0でエクセル保存する時の保存場所の指定。

    VB6.0からデータをエクセルに保存させようとしています。 保存する方法は、エクセルを開くのではなく、 ボタンを押したらそのまま自動で保存させるようにしています。 そしてその名前をつけて保存をさせる処理で、ファイルの保存場所を示す パスの指定で少々困っております。 EXEファイルがある位置をカレントとして同一フォルダ内にあるtestフォルダに 全てデータは保存したいと考えています。 絶対パスを固定で指定すればそこに保存できますが、それだと違うPC上で実行すると 動作しない危険性がありますので、相対パスで指定したいと思っています。 ですが、実行ファイルから"./test/test.xls"と指定してもパスのエラーとなり 保存できません。 しかし絶対パスの固定でフォルダを指定すると保存できます。 ws.Name = "C:\vb_test\test\test.xls" これをEXEファイルのある位置からの相対パスで指定するにはどうすればいいでしょうか?

  • シェルスクリプトでの絶対パスの取得

    UNIXのシェルスクリプトで、引数として渡された相対パスから絶対パスを取得するには、そうすればよいでしょうか。 cd 相対パス 変数=`pwd` これが一番普通のやり方でしょうか。 change directory しなくてもできる方法がないのかなあと思ったもので。

  • 相対パスから絶対パスの取得

    相対パスを指定することにより、絶対パスを取得したいのですが・・・。 どうすればいいでしょうか? ■状況■ VB6.0 Windows2000 ひとつ上の階層に行きそこのTableフォルダ内のsample.htmlのパスを取得したい。 Dir$("..\Table\sample.html")としてみたのですができませんでした。

  • 相対パスが使えない

    EXCELのファイルを呼び出したいのですが,絶対パスで e:\vb6.0\book1.xls と指定するとファイルが開くのですが, 相対パスで .\book1.xls と指定するとファイルが開けません。 なぜでしょうか? EXCELのファイルとvbのファイルは同じフォルダ内にあります.

  • シェルススクリプト内のパス指定について

    プログラムを実行するシェルスクリプト内に以下のように絶対パスで環境変数の設定用のシェルスクリプトが絶対パスで書かれているのですが、この場合だと環境が変わるたびにシェルスクリプト内のパスを書き換えなければなりません。 /dir1/dir2/dir3/setenv.sh 相対パスにすれば書き換える必要はなくなるのですが、お作法上は相対パスで書くことは問題ない(良いと)されているのでしょうか? ../../dir/setenv.sh

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

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

専門家に質問してみよう