いつもお世話になります。
下記のようにファイル処理で、ios_base::ateモードの指定を行いたいのですが、指定するとオープンに失敗してしまいます。
なぜ指定できないのでしょうか。
----------------------------------------------------
ios_base::ate … 更新モードでオープン
オープン時に書き込み位置をファイル末尾に移動
そのあとは位置指定してどの場所にも書き込みできる。
----------------------------------------------------
fstream fs( "c:\test.txt", ios_base::in | ios_base::out | ios_base::ate);
string buf;
while( fs && getline( fs, buf ) )
{
cout << buf << endl;
}
どうかご教授ください。
よろしくお願い致します。
すみません、どうやらこのモードの組み合わせはできないようですね。
1回のオープンで、ファイルがない場合は新規作成、あれば既存のファイルをオープンする。そしてその後シークするには、どのようにオープンすればよいのでしょうか?
× "c:\test.txt"
○ "c:\\test.txt"
なんつートホホなミスじゃないよね?
ちがいます。
ええ〜と・・・
それを実行したPCのOSは何でしょうか?
Cドライブにそのプロセスの所有者としての権限として、
ファイルの作成・更新が可能な権限があるのか無いのか・・・
それもご確認下さい。
以上。
ヲサヲサ指定するとオープンに失敗してしまいます。
それはどうやって調べましたか。
゜ィゥを調べているコードがないのですが。
ヲサヲサこのモードの組み合わせはできないようですね。
少なくとも規格上は許されます。
というか,ココ゜ココは組み合わせに制限はありません。
まぁ,規格書の表現からすると,ココ゜ココを組み合わせてよいかはわかりませんが。
」ヲサテケケでは「ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサモナナピナホトョ」
なんとなく,コンストラクタの指定によって読み込み位置がファイル末尾になって,
そこからしようとしても読み込む物が無く,結果としてループから抜けていて,
それを「オープンに失敗」とみなしたのではないかという気がします。
ツイート | ![]() |