CStdioFileでファイル作成時のエラーハンドリング

[戻る]
AC 2006/01/26(木) 19:29:29
.NET C++ を使用しています。

はじめましてC++を始めて1週間の初心者なのですが、
現在下記のようなコードで、次々とファイルを作成していく
モジュールを作成しています。

BOOL b = OutFile.Open( "ルートパス\" + "ファイル名", CFile::modeCreate | 
CFile::modeReadWrite);

if (b == FALSE){
    //エラー
}

通常は問題なく動作するのですが、ファイル名の先頭が「/AAA」など
先頭が「/」の場合にファイルは作成されないのにもかかわらず
エラーとして認識されないようなのです。

これはコードに問題があるのでしょうか?

もし事前にチェックが必要でしたら、
「/」以外にも特殊なものがあるのでしょうか?

よろしくお願いいたします。

KING・王 2006/01/26(木) 19:54:52
> もし事前にチェックが必要でしたら、
> 「/」以外にも特殊なものがあるのでしょうか?

とりあえず、適当なファイルを用意します。
そして、エクスプローラー上からそのファイルのファイル名の先頭が'/'で始まるように、
名前の変更を試みてください。
OSがどのような文字は使用してはダメか、エラーを出してくれます。

あと、CONとかAUXなんかもやばかったと思いますが。。。

fackt 2006/01/26(木) 20:10:55
Win32APIでは'/'を'\'と同じに扱っていたと思います。

AC 2006/01/26(木) 20:38:57
[[解決]]
早々のご返答ありがとうござます。

> とりあえず、適当なファイルを用意します。
> そして、エクスプローラー上からそのファイルのファイル名の先頭が'/'で始まるように、
> 名前の変更を試みてください。
> OSがどのような文字は使用してはダメか、エラーを出してくれます。

あ、ファイルやフォルダの作成に使用できない文字はわかっています。
ファイル名が「AA/AA」や「:AAA」などの時にはもちろんエラーがでます。
先頭が「/」の場合のみエラーとしてでないのが不思議だったのです。


> Win32APIでは'/'を'\'と同じに扱っていたと思います。

なるほど。しかし、
考え方が間違っているのかも知れませんが、
"D:\\TEST\\\\AAA"
を作成しようとすると、TESTフォルダ直下にAAAというファイルができました。


ん〜良くわかりませんが、事前に先頭の「/」はチェックすることにします。
ありがとうございました。

dairygoods 2006/01/26(木) 20:47:25
連続する \ は1個につなげるという妙な機能もあるのです。

(参考)
http://www.ipa.go.jp/security/awareness/vendor/programming/b08_01.html

subaru 2006/01/27(金) 10:48:52
「/AAA」の正確なパスを調べてみてはどうでしょうか。
MFCなら CFile::GetFilePath?

古いスレッドには追加発言できません。