プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。

VC++を使用してWindows上で動作するプログラムを作成しているのですが、ユーザに絶対パスをテキストで入力させ、そのパスが存在しなければ、フォルダとファイルを新規作成するかどうか問い合わせるという処理を行いたいと考えています。

 そこで質問なのですが、
・有効なパス設定で存在しないフォルダ
・無効なパス

上記を判定したいのですが、現状区別が付けられないでいます。実際には、以下のように処理しています。
OutputFilename:CString型、絶対パス(ファイル名含む)が入っている。
OutputPath:CString型、絶対パス(上記から「\ファイル名」を除いたもの)

// 出力ファイルのパス存在チェック
pathlen = OutputFilename.ReverseFind('\x5c');// 最後の\記号までの文字数を取得
if(pathlen == -1)
return -1; // エラー
OutputPath = OutputFilename.GetBufferSetLength(pathlen);
nRcd = _chdir(OutputPath);
if(nRcd){
if(errno == ENOENT)
return -1; ※
}

※無効なパス(例えばabc\bcd\efgなど)であっても、存在しないパス(例えばC:\tempは存在し、その配下には存在しないフォルダ名を指定-C:\temp\abc\def)であっても、同様に_chdir関数が失敗し、errnoにENOENTが入るようです。

どなたかご存知の方がおられましたら、どうかご教授お願いいたします。

A 回答 (3件)

Win32 API BOOL PathIsDirectory(LPCTSTR Path);



-------------
char *Path = "c:\\windows\\";

if (PathIsDirectory(Path)) printf("'%s'は正しいディレクトリである。\n", Path1);
else printf("'%s'は正しいディレクトリでない。\n", Path);
--------------
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。

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

お礼日時:2005/04/25 14:20

色々な方法があると思いますが、他の方も言われているように実際にアクセスしてみるのが堅実だと思います。

他には、軽くFind系で探してみる手もあります。

それから問い合わせするのであれば、うるさいユーザーの為にも書き込み不可能なCD-ROMやネッワークパスを入力された場合、マヌケなメッセージを出さないような配慮も必要ですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。

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

お礼日時:2005/04/25 14:17

::GetFileAttribute()を使って


そこにファイルがあるかディレクトリがあるか
あるいは存在しないかを調べるとよいでしょう。

パスの有効性を調べるには
とりあえず::CreateFileしてみるのでは駄目ですか?

あと
OutputFilename.ReverseFind('\x5c'); は危険かも
最後のパスが漢字だったりする場合に
あやまって検出する可能性があります。

移「0x835C」にひっかかったり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。

結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。

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

お礼日時:2005/04/25 14:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!