• 締切済み

レジストリの文字列から

レジストリの設定でキーがオープンに成功し、キーの値を取得したとき(キーの種類は文字列)その値がフォルダを生成できるかのチェックはどのようにしたらいいでしょうか?例C:\BACKUP(成功)、C:BACKUP(失敗)

みんなの回答

  • macchun
  • ベストアンサー率50% (3/6)
回答No.5

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)
回答No.4

No1&No2とNO3に対する補足が矛盾してます。 パスとしての文字列が正しくても、実際の作成が成功するとは限りません。 "B:\folder"は文字列の並びは正しいけれど、ほとんどの場合失敗します。 "C:\winnt\newfolder"が成功するかどうかは実行するユーザによって異なります。 文字列のみで判定するなら… 1.先頭2文字は"英字:" 2.それ以降は"\フォルダ名用文字の列"が繰り返される という法則になってるはずです。 【フォルダ名用文字の列】はマルチバイト文字に注意する。 作成できるかどうかで判断するなら… CreateDirectoryして戻り値が0ならGetLastError()でエラー理由判定する。 0でないなら作成成功。

gfgdhggddg
質問者

補足

こんばんは★ //"B:\folder"は文字列の並びは正しいけれど、ほとんどの場合失敗します。 "C:\winnt\newfolder"が成功するかどうかは実行するユーザによって異なります。 上記の場合だとB:folderだと失敗するようにコーディングできたのですが下記の //文字列のみで判定するなら… ・1.先頭2文字は"英字:" 2.それ以降は"\フォルダ名用文字の列"が繰り返される という法則になってるはずです。 【フォルダ名用文字の列】はマルチバイト文字に注意する。 1.2.はどのように書いたらいいでしょうか?お願い致します。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.3

「フォルダを作成してみる」という方法でチェックしてみてはいかがでしょうか。 フォルダの作成が成功すれば、フォルダの作成は可能とみなす。 フォルダの作成に失敗したら、フォルダの作成はできないものとみなす。

gfgdhggddg
質問者

補足

じゃあCREATDIRECTORYでファイルでフォルダを作成しHFINDFILEで作成したフォルダを検索し成功したら作成できたことになりますよね?

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

設問が曖昧です。 > フォルダを生成できるかのチェック 「フォルダが生成できる」というのは 1.Windowsのパスとして正しければOK 2.パスの最終ノード(C:\Backup\2005\1101の場合1101)以外が存在し、最終ノードが存在しない状態であればOK 3.2の条件にセキュリティ設定を考慮する のどれですか?

gfgdhggddg
質問者

補足

曖昧ですみません><。 1はどのようにチェックしたらいいでしょうか?なるべく簡潔にするには。1文字ずつチェックしてい他にありますでしょうか?

回答No.1

":"の前に"\"があるのをチェックすれば良い、という事ではなくて?もっと別の事かな?

gfgdhggddg
質問者

補足

はいそれもあります。ドライブ名のチェックもですが。

関連するQ&A