fstream モード指定


ひで  2012-03-26 03:58:33  No: 73252

いつもお世話になります。

下記のようにファイル処理で、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;
}

どうかご教授ください。
よろしくお願い致します。


ひで  2012-03-26 04:20:45  No: 73253

すみません、どうやらこのモードの組み合わせはできないようですね。

1回のオープンで、ファイルがない場合は新規作成、あれば既存のファイルをオープンする。そしてその後シークするには、どのようにオープンすればよいのでしょうか?


επιστημη  URL  2012-03-26 04:35:56  No: 73254

× "c:\test.txt"
○ "c:\\test.txt"

なんつートホホなミスじゃないよね?


ひで  2012-03-26 04:59:25  No: 73255

ちがいます。


オショウ  2012-03-26 06:16:54  No: 73256

ええ〜と・・・

それを実行したPCのOSは何でしょうか?
Cドライブにそのプロセスの所有者としての権限として、
ファイルの作成・更新が可能な権限があるのか無いのか・・・

それもご確認下さい。

以上。


YuO  2012-03-26 07:30:59  No: 73257

ヲサヲサ指定するとオープンに失敗してしまいます。
それはどうやって調べましたか。
゜ィゥを調べているコードがないのですが。

ヲサヲサこのモードの組み合わせはできないようですね。
少なくとも規格上は許されます。
というか,ココ゜ココは組み合わせに制限はありません。
まぁ,規格書の表現からすると,ココ゜ココを組み合わせてよいかはわかりませんが。
」ヲサテケケでは「ヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサモナナピナホトョ」

なんとなく,コンストラクタの指定によって読み込み位置がファイル末尾になって,
そこからしようとしても読み込む物が無く,結果としてループから抜けていて,
それを「オープンに失敗」とみなしたのではないかという気がします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加