.NET C++ を使用しています。
はじめましてC++を始めて1週間の初心者なのですが、
現在下記のようなコードで、次々とファイルを作成していく
モジュールを作成しています。
BOOL b = OutFile.Open( ルートパス\ + ファイル名, CFile::modeCreate |
CFile::modeReadWrite);
if (b == FALSE){
//エラー
}
通常は問題なく動作するのですが、ファイル名の先頭が「/AAA」など
先頭が「/」の場合にファイルは作成されないのにもかかわらず
エラーとして認識されないようなのです。
これはコードに問題があるのでしょうか?
もし事前にチェックが必要でしたら、
「/」以外にも特殊なものがあるのでしょうか?
よろしくお願いいたします。
> もし事前にチェックが必要でしたら、
> 「/」以外にも特殊なものがあるのでしょうか?
とりあえず、適当なファイルを用意します。
そして、エクスプローラー上からそのファイルのファイル名の先頭が'/'で始まるように、
名前の変更を試みてください。
OSがどのような文字は使用してはダメか、エラーを出してくれます。
あと、CONとかAUXなんかもやばかったと思いますが。。。
Win32APIでは'/'を'\'と同じに扱っていたと思います。
早々のご返答ありがとうござます。
> とりあえず、適当なファイルを用意します。
> そして、エクスプローラー上からそのファイルのファイル名の先頭が'/'で始まるように、
> 名前の変更を試みてください。
> OSがどのような文字は使用してはダメか、エラーを出してくれます。
あ、ファイルやフォルダの作成に使用できない文字はわかっています。
ファイル名が「AA/AA」や「:AAA」などの時にはもちろんエラーがでます。
先頭が「/」の場合のみエラーとしてでないのが不思議だったのです。
> Win32APIでは'/'を'\'と同じに扱っていたと思います。
なるほど。しかし、
考え方が間違っているのかも知れませんが、
D:\\TEST\\\\AAA
を作成しようとすると、TESTフォルダ直下にAAAというファイルができました。
ん~良くわかりませんが、事前に先頭の「/」はチェックすることにします。
ありがとうございました。
連続する \ は1個につなげるという妙な機能もあるのです。
(参考)
http://www.ipa.go.jp/security/awareness/vendor/programming/b08_01.html
「/AAA」の正確なパスを調べてみてはどうでしょうか。
MFCなら CFile::GetFilePath?