
こんにちは。
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が入るようです。
どなたかご存知の方がおられましたら、どうかご教授お願いいたします。
No.3ベストアンサー
- 回答日時:
Win32 API BOOL PathIsDirectory(LPCTSTR Path);
-------------
char *Path = "c:\\windows\\";
if (PathIsDirectory(Path)) printf("'%s'は正しいディレクトリである。\n", Path1);
else printf("'%s'は正しいディレクトリでない。\n", Path);
--------------
ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。
結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。
どうもありがとうございました。
No.2
- 回答日時:
色々な方法があると思いますが、他の方も言われているように実際にアクセスしてみるのが堅実だと思います。
他には、軽くFind系で探してみる手もあります。それから問い合わせするのであれば、うるさいユーザーの為にも書き込み不可能なCD-ROMやネッワークパスを入力された場合、マヌケなメッセージを出さないような配慮も必要ですね。
ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。
結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。
どうもありがとうございました。
No.1
- 回答日時:
::GetFileAttribute()を使って
そこにファイルがあるかディレクトリがあるか
あるいは存在しないかを調べるとよいでしょう。
パスの有効性を調べるには
とりあえず::CreateFileしてみるのでは駄目ですか?
あと
OutputFilename.ReverseFind('\x5c'); は危険かも
最後のパスが漢字だったりする場合に
あやまって検出する可能性があります。
移「0x835C」にひっかかったり
ご回答ありがとうございます。
お礼が遅くなり、申し訳ありません。
結局、GetDriveTypeと実際に作成を試みて成功するかどうかで判定することにしました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAでカレントディレクト...
-
FTPでputすると空ファイルが出...
-
フルパスから最後のディレクト...
-
ExcelVBA サーバーの(共有フォ...
-
webアプリケーションでの画像フ...
-
セルに入力されたパスでフォル...
-
C言語初心者の質問失礼します。
-
バイナリ形式のXMLファイルを読...
-
vba ActiveSheet.pasteを使った...
-
LSI C-86 v3.30c 試食版について
-
ファイル形式またはファイル拡...
-
SWTとSwingの違い
-
標準的な、vb6.0の開始・保存・...
-
C言語での採番について
-
Acccess レポートをグループ別...
-
java ファイル出力 Cドライブ直下
-
ドラッグアンドドロップでファ...
-
jarファイルとjava.exeの関連付...
-
VBAでMP3を鳴らしたい
-
デスクトップにショートカット...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
絶対パスの絶対て英語で何でし...
-
FTPでputすると空ファイルが出...
-
「UNCパスはサポートされません...
-
fopenで別ディレクトリにファイ...
-
ExcelVBAでカレントディレクト...
-
windows.hがincludeされない
-
セルに入力されたパスでフォル...
-
ExcelVBA サーバーの(共有フォ...
-
ファイルダイアログのカレント...
-
ネットワーク上のコンピュータ...
-
GetPrivateProfileStringでini...
-
ファイルやディレクトリの存在...
-
マイクラでPythonのプログラミ...
-
C言語を用いたファイルの一括削...
-
webアプリケーションでの画像フ...
-
FTPでリモートのファイル一覧取得
-
圧縮(Zip)について
-
CFileDialogを使用して、Pathを...
おすすめ情報