ディレクトリなのかファイルなのかを知る方法

解決


オグマ  2006-09-08 02:40:55  No: 62937

フルパスを元にディレクトリなのかファイルなのかを知る方法は無いでしょうか?

以下、参考までに作成しているプログラムの概要を記載します。
・ツリーごと差分を取って差分のツリーを作るプログラム。
・dir /B /Sを_popenした結果を使用する。
・現状fopen出来なかったらディレクトリとみなしているがそれもなんなので改善したい。

よろしくお願いします。


Blue  2006-09-08 02:44:53  No: 62938

GetFileAttributesあたりの関数でしらべれます。

また、shlwapi.hにはそのままの関数があります。
PathIsDirectory


オグマ  2006-09-08 19:12:06  No: 62939

ご教授ありがとう御座います。
しかしながら、shlwapi.hをincludeすると大量にエラーが出ます。
C++では無くCで作っている為だと思います。(条件記入漏れです。すみません。)
尚、C++は知りません。(Javaはちょこっとだけかじりました。)
二度手間で申し訳御座いませんが下記何れかを教えて頂け無いでしょうか?
・C++で新規にプログラムを作る方法(orそのサイト)
・Cでフルパスを元にディレクトリなのかファイルなのかを知る方法


Blue  2006-09-08 19:25:55  No: 62940

>しかしながら、shlwapi.hをincludeすると大量にエラーが出ます。
shlwapi.libはリンクしてありますか?

>・Cでフルパスを元にディレクトリなのかファイルなのかを知る方法
GetFileAttributesは確認されていないのでしょうか?
戻り値にFILE_ATTRIBUTE_DIRECTORYが含まれているか(&演算子を使う)で確認できるはずですが?


オグマ  2006-09-08 19:45:35  No: 62941

>>しかしながら、shlwapi.hをincludeすると大量にエラーが出ます。
>shlwapi.libはリンクしてありますか?
「リンク」が何かがわかりません。
#include <shlwapi.h>
と書いたら#includeしただけなのにコンパイルエラーになりました。
・C++知らないので的外れなことしてるかもしれません。
・Win32 console Application 空のプロジェクト ファイルはmain.cのみです。

>>・Cでフルパスを元にディレクトリなのかファイルなのかを知る方法
>GetFileAttributesは確認されていないのでしょうか?
>戻り値にFILE_ATTRIBUTE_DIRECTORYが含まれているか(&演算子を使う)で
>確認できるはずですが?
GetFileAttributesがヘルプでグレイアウトされていて、ヘッダファイルがわからず未確認でした。grepすれば解ることに気付き、MAPIWIN.Hを#includeしたのですがエラーになりました。


dairygoods  2006-09-08 19:54:48  No: 62942

#include <windows.h> だと思います。

ところで、別のアプローチとして、
dir /B /S /A-D
として、ディレクトリは出力しないというのはダメですか。


Blue  2006-09-08 20:13:54  No: 62943

>「リンク」が何かがわかりません。
ヘッダーファイルをインクルードするというのは、
ただ、インクルードされた側に「こういう関数があるよ」というのを教えただけに過ぎません。
実際使うときに、この関数使いたいんだけど、、、どうやって使うの?
って状態になってしまいます。

ということで、コンパイルするときに「どうやって使うのか」を〜.libをリンクさせることで教えてあげます。

方法としては2つ。(VC6とします)
・プロジェクトの設定より、リンクタブ→カテゴリ「インプット」→オブジェクト/ライブラリモジュール のエディットボックスに 〜.lib を追加。
・#pragma comment( lib, "〜.lib" )をソース中に入れる

>GetFileAttributesがヘルプでグレイアウトされていて、ヘッダファイルがわからず未確認でした。
そういう時は、MSDNで調べましょう。必要なヘッダファイルが明記されています。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_getfileattributes.asp


オグマ  2006-09-08 20:21:35  No: 62944

#include <windows.h>
したところ、GetFileAttributesを使えました。

>dir /B /S /A-D
>として、ディレクトリは出力しないというのはダメですか。
おっしゃるとおりです。うかつでした。
(GetFileAttributesの方も別の箇所の改善に使えますので助かりました。)

ありがとう御座います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加