フルパスを元にディレクトリなのかファイルなのかを知る方法は無いでしょうか?
以下、参考までに作成しているプログラムの概要を記載します。
・ツリーごと差分を取って差分のツリーを作るプログラム。
・dir /B /Sを_popenした結果を使用する。
・現状fopen出来なかったらディレクトリとみなしているがそれもなんなので改善したい。
よろしくお願いします。
GetFileAttributesあたりの関数でしらべれます。
また、shlwapi.hにはそのままの関数があります。
PathIsDirectory
ご教授ありがとう御座います。
しかしながら、shlwapi.hをincludeすると大量にエラーが出ます。
C++では無くCで作っている為だと思います。(条件記入漏れです。すみません。)
尚、C++は知りません。(Javaはちょこっとだけかじりました。)
二度手間で申し訳御座いませんが下記何れかを教えて頂け無いでしょうか?
・C++で新規にプログラムを作る方法(orそのサイト)
・Cでフルパスを元にディレクトリなのかファイルなのかを知る方法
>しかしながら、shlwapi.hをincludeすると大量にエラーが出ます。
shlwapi.libはリンクしてありますか?
>・Cでフルパスを元にディレクトリなのかファイルなのかを知る方法
GetFileAttributesは確認されていないのでしょうか?
戻り値にFILE_ATTRIBUTE_DIRECTORYが含まれているか(&演算子を使う)で確認できるはずですが?
>>しかしながら、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したのですがエラーになりました。
#include <windows.h> だと思います。
ところで、別のアプローチとして、
dir /B /S /A-D
として、ディレクトリは出力しないというのはダメですか。
>「リンク」が何かがわかりません。
ヘッダーファイルをインクルードするというのは、
ただ、インクルードされた側に「こういう関数があるよ」というのを教えただけに過ぎません。
実際使うときに、この関数使いたいんだけど、、、どうやって使うの?
って状態になってしまいます。
ということで、コンパイルするときに「どうやって使うのか」を〜.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
#include <windows.h>
したところ、GetFileAttributesを使えました。
>dir /B /S /A-D
>として、ディレクトリは出力しないというのはダメですか。
おっしゃるとおりです。うかつでした。
(GetFileAttributesの方も別の箇所の改善に使えますので助かりました。)
ありがとう御座います。
ツイート | ![]() |