ページ 11

画像の有無を調べる?

Posted: 2009年6月13日(土) 18:32
by チルチル
自重すると言っておきながら質問してしまってすいません・・

DXライブラリを使用しているのですが

画像名を引数として渡すと画像が存在するかが返ってくる関数などは無いでしょうか?

Re:画像の有無を調べる?

Posted: 2009年6月13日(土) 19:10
by pooka
access関数を利用してみてはどうでしょうか?
char *fname = "test.png";
if(access(fname,0) != 0)
	printf("%sは存在しません。\n",fname);
使い方としてはこんなかんじでしょうか。

参考サイト
ttp://www.orchid.co.jp/computer/cschool/CREF/access.html

Re:画像の有無を調べる?

Posted: 2009年6月13日(土) 19:27
by チルチル
多分access関数で大丈夫だと思います

どうもありがとうございました

Re:画像の有無を調べる?

Posted: 2009年6月13日(土) 22:22
by チルチル
と思ったんですが
access関数はどのヘッダファイルを読み込めば使えるのでしょうか?

一応自分でも「C++ access関数」とかで検索してみたのですが
書いてあるサイトが見つからなかったので・・

Re:画像の有無を調べる?

Posted: 2009年6月13日(土) 22:46
by ねこ
とりあえずOpenFileかCreateFileあたりで検索してみると良いよ

Re:画像の有無を調べる?

Posted: 2009年6月13日(土) 22:48
by Justy

>access関数はどのヘッダファイルを読み込めば使えるのでしょうか?

 VisualStudio2008なら io.hにあります。
 ただし、関数名はちょっと異なりますが。


※ ネットで見つからないなら、ヘッダを grepして探しましょう。

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 00:00
by tk-xleader
Windows APIを使ってもよいのなら、shlwapi.hにこんな関数があります。

BOOL PathFileExists(LPCTSTR pszPath);

↓が参考です、英語ですが。
http://msdn.microsoft.com/en-us/library/bb773584(VS.85).aspx

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 00:12
by チルチル
OpenFileとCreateFileで検索して
「atlfile.h」と言うヘッダが見つかりましたが違ったようです・・

ちなみに「ヘッダを grep」とはどういうことでしょうか?

「Windows API」はまだ使えそうにありません・・
あと英語無理でした・・

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 00:24
by tk-xleader
ヘッダをgrepとは、簡単に言えば検索のことです。(UNIX系のOSでは、ファイル内テキスト検索のコマンド名はgrep。)

Windows APIは使えないと言いますが、そんなに難しくありませんよ、普通に、

#include<shlwapi.h>

を書いて、DXライブラリ関数の呼び出しと同じように、

PathFileExists("tekitou.png");

と呼び出せばいいです。戻り値がTRUEなら存在する、FALSEなら存在せずです。

後、個人的にはaccess関数は避けておいたほうがいいのではないかなと思います。<io.h>の関数は、環境への依存度が大きいからです。(PathFileExistsは、Windows APIが使えるところならば大抵使える。)

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 00:38
by チルチル
あ~なるほど環境への依存度も考えたほうが良いんですね

Windows APIは言語の一種か何かと思っていましたが
意外と身近なものだったんですね・・

多分これで行けると思うので試してみます

ところで少し表題からずれますが

①ヘッダファイルの中身って結構いろいろ書かれているようですが
ヘッダファイルを読み込むだけでそれなりに実行ファイルの容量が増えるのでしょうか?

②DxLib.h以外のヘッダってどこにあるんでしょうか?

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 00:52
by チルチル
やってみたんですが

access関数を使った処理の方は見た感じ問題なく動いたのですが

PathFileExists関数を組み込んだ関数を呼び出すと

Error: 外部シンボル 'PathFileExistsA' が未解決(D:\新しいフォルダ\データ\RESISTANCE\パソコン部\AA.CPP\DEBUG\AA.OBJ が参照)

と言うエラーが出ます・・

これはどういう意味なんでしょうか・・?

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 02:05
by ねこ
使ったことないから勘ですが
#pragma comment( lib, "shlwapi.lib" )
をincludeのあとに入れたらコンパイル通るかも?

基本的に未解決ってのはライブラリがリンクされていない時に出るエラーです。

<ファイル容量
当然増えます。気にする程じゃないですが。

<ヘッダの場所
適当に<math.h>とか書いて右クリックして「ドキュメントを開く」押したらタブが開くので
タブにカーソル当てたらフルパス見れますよ

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 07:38
by チルチル
>>コンパイル通るかも?

通りました、どうもありがとうございます

>>当然増えます。気にする程じゃないですが

たしかにDxLib.hが187KB程度ですから大して増えなさそうですね

>>適当に<math.h>とか書いて

BCCでやってみましたができませんでした・・
どこに書けばいいのでしょうか?

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 08:24
by tk-xleader
BCCをどこにインストールしたかにもよりますが、C:\borland にインストールしたのであれば、
C:\borland\bcc55\Include
というところにあります。

後、
>Windows APIは言語の一種か何かと思っていましたが
>意外と身近なものだったんですね・・

Windows APIは、Windows本体そのもののようなものです。Windowsであれば必ず存在します。

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 12:33
by チルチル
たしかにありますね、結構たくさんある・・

>>Windowsであれば必ず存在します

って事はWindows以外のOSだと使えないんでしょうか?

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 13:45
by ねこ
<って事はWindows以外のOSだと使えないんでしょうか?
意識してないと思いますが質問の意味が広義すぎます。
Windows以外のOSで動かないといけないものを作っているのですか?

まず検索してWindows APIがどういうものか調べた後
自分にとって不都合を感じる点があったらそこに焦点を当てて再度質問して下さい。

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 13:55
by チルチル
そういえば広義ですね
主語が抜けてる・・

とりあえず独立的な処理に使っているので
不具合が出てから直しても問題なさそうですね

では解決にしておきます

どうもありがとうございました

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 17:56
by yu
横から入ってきてすみません;
同じ類の質問で少し気になったので・・・。

以前自分は、データがあるかないかを判定するときに
fopen関数がファイルオープンを失敗したときにNULLポインタを返してくることを利用して
そのデータの有無を判定していたのですが、
これは危険なのでしょうか?

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 18:54
by Justy

>fopen関数がファイルオープンを失敗したときにNULLポインタを返してくることを
>利用してそのデータの有無を判定していたのですが

 fopenの戻り値ではファイルが存在するかどうかは判りません。
 判るのはそのファイルに対して読み込み・書き込みなどアクセスできるかどうか、です。

 ファイルが無ければ fopenは勿論失敗しますが、ファイルがあっても
そのファイルへのアクセス権がなかったりしても失敗します。

 具体的にはファイルに Read Only属性がついているのに書き込みモードで開こうとした場合や
セキュリティ的にアクセス権がない場合、別のスレッド・プロセスでそのファイルが
使用中である(ロックされている)場合などがあります。

 そのほか、環境的な問題や実装上の内部的な事情によっても失敗することはありますので、
(読み書きできるかどうかは関係なく)ファイルの有無だけが知りたい場合には
不適切といえますね。

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 19:46
by yu
そういえばexcelでファイルを開いているとfopenで失敗したことがありました;

今は Windows API が使えない環境でゲームを作っていますので PathFileExists が使えません・・・

ゲームをやっているときはファイルを開いたりはしないので(環境の方もそのハードで動くだけで良いので
少々危険ですがfopenで妥協することにします

どうもありがとうございました m(_ _)m


後、こちらのほうに色々なやり方がまとめて答えてありました (fopenの方法もあって驚きました
ttp://oshiete1.goo.ne.jp/qa3399080.html

Re:画像の有無を調べる?

Posted: 2009年6月14日(日) 20:38
by チルチル
>>fopen関数がファイルオープンを失敗したときにNULLポインタを返してくることを利用して・・

そういえば私も同じ事やってました・・

>>少々危険ですがfopenで妥協することにします

私もそうする事にします・・