- 締切済み
レジストリの文字列から
レジストリの設定でキーがオープンに成功し、キーの値を取得したとき(キーの種類は文字列)その値がフォルダを生成できるかのチェックはどのようにしたらいいでしょうか?例C:\BACKUP(成功)、C:BACKUP(失敗)
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- macchun
- ベストアンサー率50% (3/6)
Windows NT/2000/XP 等で動作させるのでしたら、以下の方法があります。 1. ファイル名を UNICODE に変換する(MultiByteToWideChar() などで) 2. ファイル名の先頭に "\\?\" を付記する(例えば、"C:\BACKUP" なら "\\?\C:\BACKUP" に変換)。 3. mkdir()/CreateDirectory() の代わりに CreateDirectoryW() を使用する。 これを行うことによって、相対パス(例えば"C:BACKUP")を指定したときにエラーが発生するようになるはずです。 ただ、この方法は Windows 95/98/Me では使用できません。もしこれらのOSも対象とする場合には、フルパスを取得して、それと相違がある場合には失敗させる方法もありますが、いかがでしょうか?
- toysmith
- ベストアンサー率37% (570/1525)
No1&No2とNO3に対する補足が矛盾してます。 パスとしての文字列が正しくても、実際の作成が成功するとは限りません。 "B:\folder"は文字列の並びは正しいけれど、ほとんどの場合失敗します。 "C:\winnt\newfolder"が成功するかどうかは実行するユーザによって異なります。 文字列のみで判定するなら… 1.先頭2文字は"英字:" 2.それ以降は"\フォルダ名用文字の列"が繰り返される という法則になってるはずです。 【フォルダ名用文字の列】はマルチバイト文字に注意する。 作成できるかどうかで判断するなら… CreateDirectoryして戻り値が0ならGetLastError()でエラー理由判定する。 0でないなら作成成功。
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
「フォルダを作成してみる」という方法でチェックしてみてはいかがでしょうか。 フォルダの作成が成功すれば、フォルダの作成は可能とみなす。 フォルダの作成に失敗したら、フォルダの作成はできないものとみなす。
補足
じゃあCREATDIRECTORYでファイルでフォルダを作成しHFINDFILEで作成したフォルダを検索し成功したら作成できたことになりますよね?
- toysmith
- ベストアンサー率37% (570/1525)
設問が曖昧です。 > フォルダを生成できるかのチェック 「フォルダが生成できる」というのは 1.Windowsのパスとして正しければOK 2.パスの最終ノード(C:\Backup\2005\1101の場合1101)以外が存在し、最終ノードが存在しない状態であればOK 3.2の条件にセキュリティ設定を考慮する のどれですか?
補足
曖昧ですみません><。 1はどのようにチェックしたらいいでしょうか?なるべく簡潔にするには。1文字ずつチェックしてい他にありますでしょうか?
- hello_world
- ベストアンサー率46% (15/32)
":"の前に"\"があるのをチェックすれば良い、という事ではなくて?もっと別の事かな?
補足
はいそれもあります。ドライブ名のチェックもですが。
補足
こんばんは★ //"B:\folder"は文字列の並びは正しいけれど、ほとんどの場合失敗します。 "C:\winnt\newfolder"が成功するかどうかは実行するユーザによって異なります。 上記の場合だとB:folderだと失敗するようにコーディングできたのですが下記の //文字列のみで判定するなら… ・1.先頭2文字は"英字:" 2.それ以降は"\フォルダ名用文字の列"が繰り返される という法則になってるはずです。 【フォルダ名用文字の列】はマルチバイト文字に注意する。 1.2.はどのように書いたらいいでしょうか?お願い致します。