こんにちは。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) VBSで作成した相対パスのショートカットが他者と共有できません。 1 2022/09/05 11:20
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) 【VBA】フォルダAにある2つのファイルの内1つを、フォルダBへ。もう1つを、フォルダBへ移動したい 6 2022/07/26 08:51
- Visual Basic(VBA) VBAでファイル名を指定して保存するとき 4 2023/03/26 21:55
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納 3 2022/04/10 03:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フルパスから最後のディレクト...
-
どんなプログラムを書いても指...
-
FTPでputすると空ファイルが出...
-
ExcelVBAでカレントディレクト...
-
GetPrivateProfileStringでini...
-
windows.hがincludeされない
-
pythonでの日本語操作
-
fopenで別ディレクトリにファイ...
-
C言語を用いたファイルの一括削...
-
Excel2013 FSO.getAbsolutePath...
-
ファイルやディレクトリの存在...
-
VBA 探しているFileがないとき...
-
ファイルダイアログのカレント...
-
webアプリケーションでの画像フ...
-
エクセルVBAで相対パスでファイ...
-
ソフトウェアからオープンされ...
-
ExcelVBA サーバーの(共有フォ...
-
FindFirstFileについて
-
EXCELでダイアログボックスを開...
-
C言語初心者の質問失礼します。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
マイクラでPythonのプログラミ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
ExcelVBA サーバーの(共有フォ...
-
エクセルVBAで相対パスでファイ...
-
pythonでの日本語操作
-
VBAで自身のファイル名を取得す...
-
webアプリケーションでの画像フ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
ファイルダイアログのカレント...
おすすめ情報