DXライブラリでのファイルの扱い
DXライブラリでのファイルの扱い
DXライブラリを使っているのですが、ファイルの扱い方がよく分かりません。
ファイルの名前を拡張し付きで指定して、読み込まれるのですが、
ファイルの場所を移動してしまったりすると読み込まれません。
exeファイルの入っているフォルダ内にそのファイルがある事が条件のようなのですが、
これを、移動しても読み込まれるようにしたいのです。そして、下記のように書いてみたのですが、
エラーが出てしまいました。この書き方ではだめなのでしょうか?どうしたら、exeファイルとは、
別のフォルダ内にあるファイルを読み込ませる事が出来るのでしょうか。
初心者で申し訳ありません。
LoadGraph("\テスト\画像\テスト.jpg")
これでエラーが出てしまいます。
初歩的な質問で申し訳ありませんが、お願いします。
ファイルの名前を拡張し付きで指定して、読み込まれるのですが、
ファイルの場所を移動してしまったりすると読み込まれません。
exeファイルの入っているフォルダ内にそのファイルがある事が条件のようなのですが、
これを、移動しても読み込まれるようにしたいのです。そして、下記のように書いてみたのですが、
エラーが出てしまいました。この書き方ではだめなのでしょうか?どうしたら、exeファイルとは、
別のフォルダ内にあるファイルを読み込ませる事が出来るのでしょうか。
初心者で申し訳ありません。
LoadGraph("\テスト\画像\テスト.jpg")
これでエラーが出てしまいます。
初歩的な質問で申し訳ありませんが、お願いします。
Re:DXライブラリでのファイルの扱い
ファイルのパス指定ですね。
ルールがありますので、覚えてください。
..\で、1つ上のフォルダを指します。
.\で、今の(カレント)フォルダを指します。今のフォルダはexeをダブルクリックだとexeファイルのある場所、VC++からの起動だとソースのある場所です。
\だけだとルートを指します。実行ファイルのあるドライブのルートを指すわけです。C:\とかD:\と同等です。
なので、"\テスト\画像\テスト.jpg"と書くと"c:\テスト\画像\テスト.jpg"や"d:\テスト\画像\テスト.jpg"と書いたのと同じ事になります。
どう書くと正しいかは実行環境に依存しますので、実行環境を教えてください。
ルールがありますので、覚えてください。
..\で、1つ上のフォルダを指します。
.\で、今の(カレント)フォルダを指します。今のフォルダはexeをダブルクリックだとexeファイルのある場所、VC++からの起動だとソースのある場所です。
\だけだとルートを指します。実行ファイルのあるドライブのルートを指すわけです。C:\とかD:\と同等です。
なので、"\テスト\画像\テスト.jpg"と書くと"c:\テスト\画像\テスト.jpg"や"d:\テスト\画像\テスト.jpg"と書いたのと同じ事になります。
どう書くと正しいかは実行環境に依存しますので、実行環境を教えてください。
Re:DXライブラリでのファイルの扱い
softyaさん、回答ありがとうございました。
ですが、もっと根本的なエラーだったようで…
warning C4129: '' :
こんなエラーが出てくるのですが、よく意味が分からず…
なんだか、ファイルのパスに使ってる¥がエスケープシーケンスだと思われているのでしょうか?
DXライブラリでこの方法でいいのですかね?よく分かりません。
実行環境というのはVC++からの起動です…と答えればいいのでしょうか…
ファイル指定ですが、exeファイルと同じフォルダ内にあるフォルダの中のaaa.jpg
というファイルを指定する場合、
.\aaa.jpgが入ってるフォルダ名\aaa.jpg
と、書けばいいのでしょうか?
それと、先ほどのエラーの意味を教えて下さると助かります。
申し訳ありません。
ですが、もっと根本的なエラーだったようで…
warning C4129: '' :
こんなエラーが出てくるのですが、よく意味が分からず…
なんだか、ファイルのパスに使ってる¥がエスケープシーケンスだと思われているのでしょうか?
DXライブラリでこの方法でいいのですかね?よく分かりません。
実行環境というのはVC++からの起動です…と答えればいいのでしょうか…
ファイル指定ですが、exeファイルと同じフォルダ内にあるフォルダの中のaaa.jpg
というファイルを指定する場合、
.\aaa.jpgが入ってるフォルダ名\aaa.jpg
と、書けばいいのでしょうか?
それと、先ほどのエラーの意味を教えて下さると助かります。
申し訳ありません。
Re:DXライブラリでのファイルの扱い
VC++だと、\マークひとつではエスケープシーケンスだとコンパイラは解釈します。
なので、\\と書いてください。
>ファイル指定ですが、exeファイルと同じフォルダ内にあるフォルダの中のaaa.jpg
というファイルを指定する場合、.\aaa.jpgが入ってるフォルダ名\aaa.jpg
VC++の場合は、ソースコードのあるフォルダがデフォルトだったはずですので、そこからの相対でファイルのあるパスを指定する必要があります。
"..\\Debug\\aaa.jpg"
が正解だと思います。
ただ、これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、
"aaa.jpg"
で動く様にしたほうが良いとは思います。
なので、\\と書いてください。
>ファイル指定ですが、exeファイルと同じフォルダ内にあるフォルダの中のaaa.jpg
というファイルを指定する場合、.\aaa.jpgが入ってるフォルダ名\aaa.jpg
VC++の場合は、ソースコードのあるフォルダがデフォルトだったはずですので、そこからの相対でファイルのあるパスを指定する必要があります。
"..\\Debug\\aaa.jpg"
が正解だと思います。
ただ、これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、
"aaa.jpg"
で動く様にしたほうが良いとは思います。
Re:DXライブラリでのファイルの扱い
softyaさん、ありがとうございます。
返事が遅くなってしまいました。すいません。
ですが、やっぱり読み込んでくれません。
どう間違っているのかよく分かりません。
何となく頭でこんがらがってしまって、
どこがどう分からないのかもよく分かりません。
フォルダをソースファイルの場所に移動しました。
変更してしまってすいません。
読み込みたいファイルは、
ソースのあるフォルダ→フォルダ1→フォルダ2→ファイル
となっているように変更しました。
読み込みたいファイルが複数あるのですが、そのファイルが、
フォルダ1の中に複数フォルダがあり、そのフォルダの中にそれぞれファイルが入っているようになっているのですが…
いろいろ試してみたのですがどれも読み込んでもらえず…
エラーはなくなったのですが…
>これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、
"aaa.jpg"
で動く様にしたほうが良いとは思います。
ここの意味がよく分からないのですが、これはどこをどのように変えればよいのでしょう?
違うフォルダ内にある複数のファイルでも意味があるのですか?
理解できなくて申し訳ありません。
返事が遅くなってしまいました。すいません。
ですが、やっぱり読み込んでくれません。
どう間違っているのかよく分かりません。
何となく頭でこんがらがってしまって、
どこがどう分からないのかもよく分かりません。
フォルダをソースファイルの場所に移動しました。
変更してしまってすいません。
読み込みたいファイルは、
ソースのあるフォルダ→フォルダ1→フォルダ2→ファイル
となっているように変更しました。
読み込みたいファイルが複数あるのですが、そのファイルが、
フォルダ1の中に複数フォルダがあり、そのフォルダの中にそれぞれファイルが入っているようになっているのですが…
いろいろ試してみたのですがどれも読み込んでもらえず…
エラーはなくなったのですが…
>これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、
"aaa.jpg"
で動く様にしたほうが良いとは思います。
ここの意味がよく分からないのですが、これはどこをどのように変えればよいのでしょう?
違うフォルダ内にある複数のファイルでも意味があるのですか?
理解できなくて申し訳ありません。
Re:DXライブラリでのファイルの扱い
たしかVC++ですと、、、
プロジェクトファイル(拡張子「.sln」「.dsw」等)のあるフォルダがカレントだったはずです。
あと、プログラム中では多分バックスラッシュ2個「\\」でなくてもスラッシュ「/」でいいと思われます。
「フォルダ1/フォルダ2/ファイル」
こんな感じで動きませんか?
プロジェクトファイル(拡張子「.sln」「.dsw」等)のあるフォルダがカレントだったはずです。
あと、プログラム中では多分バックスラッシュ2個「\\」でなくてもスラッシュ「/」でいいと思われます。
「フォルダ1/フォルダ2/ファイル」
こんな感じで動きませんか?
Re:DXライブラリでのファイルの扱い
あれ?カレントディレクトリが違ってましたか。申し訳ない。
(1)まず、カレントディレクトリを確認してください。
{
TCHAR dir[512];
GetCurrentDirectory(512,dir);
OutputDebugString(dir);
OutputDebugString(TEXT("\n"));
}
これでVisualStudioの出力ウィンドウにカレントのディレクトリが表示されます。
>これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、"aaa.jpg"で動く様にしたほうが良いとは思います
ごめんなさい分かり辛かったですね。
これは起動時のカレントディレクトを強制的に変更する方法です。
(2)VisualStudioのメニューで、[プロジェクト]→[xxxのプロジェクト]→[構成プロパティ]→[デバッグ]→[作業ディレクトリ]で起動時のディレクトリを指定します。
とりあえず(1)の方法で、カレントディレクトリを確認して、相対パスでファイルを開けるようにしてください。(2)に関しては、こんな方法もあるって事で今回は混乱するので忘れてください。申し訳ない。
(1)まず、カレントディレクトリを確認してください。
{
TCHAR dir[512];
GetCurrentDirectory(512,dir);
OutputDebugString(dir);
OutputDebugString(TEXT("\n"));
}
これでVisualStudioの出力ウィンドウにカレントのディレクトリが表示されます。
>これだと他の人にプログラムを配布する時困りますので、プロジェクトの構成プロパティでデバッグの作業フォルダを変更してしまってプログラム内では、"aaa.jpg"で動く様にしたほうが良いとは思います
ごめんなさい分かり辛かったですね。
これは起動時のカレントディレクトを強制的に変更する方法です。
(2)VisualStudioのメニューで、[プロジェクト]→[xxxのプロジェクト]→[構成プロパティ]→[デバッグ]→[作業ディレクトリ]で起動時のディレクトリを指定します。
とりあえず(1)の方法で、カレントディレクトリを確認して、相対パスでファイルを開けるようにしてください。(2)に関しては、こんな方法もあるって事で今回は混乱するので忘れてください。申し訳ない。
Re:DXライブラリでのファイルの扱い
羽流布さんsoftyaさん解答ありがとうございます。
ですが何度やって成功しません。
最初にやっていた画像をフォルダに入れないで(カレントフォルダよりも、下層のフォルダに入れないという意味)置いて使っていた時は、
読み込んでくれたので、そこがカレントフォルダ?という認識でいいのでしょうか?
なので、そこから1階層下のフォルダ(フォルダ1)、に入れて、
ソースもその部分を書き換えて実行すると、読み込まれました。
「/」でも動きました。
ですが、さらに1階層下げたフォルダに入れて、
パスを書き換えて実行すると読み込んでくれません。
なぜなのでしょうか?
>ごめんなさい分かり辛かったですね。
いえいえ、こちらの理解力が足りなくて申し訳ありません。
丁寧な説明ありがとうございます。
ですが何度やって成功しません。
最初にやっていた画像をフォルダに入れないで(カレントフォルダよりも、下層のフォルダに入れないという意味)置いて使っていた時は、
読み込んでくれたので、そこがカレントフォルダ?という認識でいいのでしょうか?
なので、そこから1階層下のフォルダ(フォルダ1)、に入れて、
ソースもその部分を書き換えて実行すると、読み込まれました。
「/」でも動きました。
ですが、さらに1階層下げたフォルダに入れて、
パスを書き換えて実行すると読み込んでくれません。
なぜなのでしょうか?
>ごめんなさい分かり辛かったですね。
いえいえ、こちらの理解力が足りなくて申し訳ありません。
丁寧な説明ありがとうございます。
Re:DXライブラリでのファイルの扱い
"./フォルダ1/aaa.jpg"
が問題なく読み込める場合にフォルダ1の中にフォルダ2を作って更にフォルダ2にaaa.jpgファイルを入れたとしたら、
"./フォルダ1/フォルダ2/aaa.jpg"
で読み込めるはずです。
それとも違うパス指定でしょか?
が問題なく読み込める場合にフォルダ1の中にフォルダ2を作って更にフォルダ2にaaa.jpgファイルを入れたとしたら、
"./フォルダ1/フォルダ2/aaa.jpg"
で読み込めるはずです。
それとも違うパス指定でしょか?
Re:DXライブラリでのファイルの扱い
フォルダ1までなら、
"./フォルダ1/aaa.jpg"
と書いて普通に読み込まれました。
(最初の./がなくても読み込まれました。最初に./とかをつかずに読み込まれたのはなぜでしょう?
DXアーカイブファイルの説明を試してみたのですが…)
そして、この次にフォルダ1の中のフォルダ2の中にaaa.jpgを入れて、パスを
"./フォルダ1/フォルダ2/aaa.jpg"
としたら読み込まれなくなってしまいました。
理由がよく分かりません。DXライブラリは、1下層より下のフォルダに対応していない?
そんなはずないと思うのですが…
softyaさん。何度も何度も回答ありがとうございます。
"./フォルダ1/aaa.jpg"
と書いて普通に読み込まれました。
(最初の./がなくても読み込まれました。最初に./とかをつかずに読み込まれたのはなぜでしょう?
DXアーカイブファイルの説明を試してみたのですが…)
そして、この次にフォルダ1の中のフォルダ2の中にaaa.jpgを入れて、パスを
"./フォルダ1/フォルダ2/aaa.jpg"
としたら読み込まれなくなってしまいました。
理由がよく分かりません。DXライブラリは、1下層より下のフォルダに対応していない?
そんなはずないと思うのですが…
softyaさん。何度も何度も回答ありがとうございます。
Re:DXライブラリでのファイルの扱い
>(最初の./がなくても読み込まれました。最初に./とかをつかずに読み込まれたのはなぜでしょう?
DXアーカイブファイルの説明を試してみたのですが…)
省略したらカレントです。私のは念のため書いているだけですね。Linux系ではこの書き方をしないと問題が出るので、仕事で関わったときに身についたクセといっても良いかもしれません(^^ゞ
>そして、この次にフォルダ1の中のフォルダ2の中にaaa.jpgを入れて、パスを
"./フォルダ1/フォルダ2/aaa.jpg"
>としたら読み込まれなくなってしまいました。
うーん。とりあえず私の示した方法でカレントディレクトリを確認してみてください。
本当にカレントディレクトリは狙った場所にあるか疑問です。
あとフォルダ名も単純な英字だけにしてみて試してくださいね。
>理由がよく分かりません。DXライブラリは、1下層より下のフォルダに対応していない?
龍神録はもっと複雑なパス指定をしてますので、そんなはずは無いのですが。
DXアーカイブファイルの説明を試してみたのですが…)
省略したらカレントです。私のは念のため書いているだけですね。Linux系ではこの書き方をしないと問題が出るので、仕事で関わったときに身についたクセといっても良いかもしれません(^^ゞ
>そして、この次にフォルダ1の中のフォルダ2の中にaaa.jpgを入れて、パスを
"./フォルダ1/フォルダ2/aaa.jpg"
>としたら読み込まれなくなってしまいました。
うーん。とりあえず私の示した方法でカレントディレクトリを確認してみてください。
本当にカレントディレクトリは狙った場所にあるか疑問です。
あとフォルダ名も単純な英字だけにしてみて試してくださいね。
>理由がよく分かりません。DXライブラリは、1下層より下のフォルダに対応していない?
龍神録はもっと複雑なパス指定をしてますので、そんなはずは無いのですが。
Re:DXライブラリでのファイルの扱い
成功しました!!
本当にありがとうございました。
ファイル名に漢字を使っていたのが原因だったようです。
softyaさん、羽流布さん
本当にありがとうございました。
そして、しょうもないミスでご迷惑をおかけしてすいませんでした。
本当にありがとうございました。
ファイル名に漢字を使っていたのが原因だったようです。
softyaさん、羽流布さん
本当にありがとうございました。
そして、しょうもないミスでご迷惑をおかけしてすいませんでした。
Re:DXライブラリでのファイルの扱い
>ファイル名に漢字を使っていたのが原因だったようです。
なるほど漢字ですか。
コンパイラの文字コードがUNICODE時はOKですがマルチバイト文字(SJIS)では問題の出る漢字がありますので、漢字は使わないほうが無難です。"態"とか色々と。
なるほど漢字ですか。
コンパイラの文字コードがUNICODE時はOKですがマルチバイト文字(SJIS)では問題の出る漢字がありますので、漢字は使わないほうが無難です。"態"とか色々と。