Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

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

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

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

  • ベストアンサー
  • 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