creatでファイルを開くと・・・

[戻る]
りん 2002/03/12(火) 10:15:27
こんにちは。りんといいます。

creatでファイルを開きデータの末尾に”CRLF(0x0d0a)”を足し込み書き込んだ場合、
例1の様に改行が1行多く出力されます。
例1:
------------------------------------
xxxxxxxxxxxxxxxxxxxx(書き込んだデータ)

[EOF]
------------------------------------
openで同様の処理を行うと例2の様に正常に出力されます。
例2:
------------------------------------
xxxxxxxxxxxxxxxxxxxx(書き込んだデータ)
[EOF]
------------------------------------

creat又はopenの_O_CREATモードを使用して例2の様に出力したいのですが、
どうすれば良いのでしょうか。
'CRLF'の変わりに'\n'を使用すると上手くいのは確認したのですが、
'CRLF'を使用しての方法を教えて頂けないでしょうか。
(ちなみにopenで_O_CREATモードで開いた場合も例1の様になってしまいます・・。)

環境はWindows98でVC++6.0です。
宜しくお願い致します。

試~1 [E-Mail] 2002/03/12(火) 10:39:48
ファイルへのアクセスがテキストモードの場合、
ファイルから読み込みを行うと、
\r\nの二文字が1つの改行記号として扱われます。

従って、ファイルへ書き込む場合も
\rと\nそれぞれに対して
\r→\r\n
\n→\r\n
と変換され、結果として改行二つになってしまいます。

なので、バイナリモードを指定すれば良いわけで、
_fmode変数をバイナリ変換用(_O_BINARY)に設定すれば良いはずです。

いもちぃ 2002/03/12(火) 10:40:36
バイナリでオープンしてますか?
テキストでオープンしてるとダメかも。
てか、「どうして\nじゃだめか」という根本的な問題が
かかれていないのでなんとも答えようがないというほうが
正直な回答ですが。

いもちぃ 2002/03/12(火) 10:41:27
48秒差で同じことを書いてしまいました。(^^;

りん 2002/03/12(火) 12:18:55
りんです。
試~1さんいもちぃさん回答ありがとうございます。
@creat(FILE_TMPMRCFD , _S_IWRITE | _O_BINARY)
Acreat(FILE_TMPMRCFD , _O_BINARY)
Bopen(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT , _S_IWRITE  | _O_BINARY)
Copen(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT , _O_BINARY)
@、A、B、C共にやっぱりだめなのですが・・・。
んーーーなぜなのでしょう??

いもちぃさんヘ
「どうして\nじゃだめか」と言う事ですが、
CRLFを\nに変更する事によりそれに付随する
多大な個所を修正する必要があるからです。
(個人的な事ですみません!!)

回答の程、宜しくお願い致します。

試~1 [E-Mail] 2002/03/12(火) 12:40:36
_creat関数の第2引数はファイルのアクセス権に関する物ですので、
(1)(2)の様な指定はできません。
_open関数の第3引数も同様です。
_O_BINARYは第2引数に指定しましょう。

open(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT | _O_BINARY , _S_IWRITE)
open(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT | _O_BINARY)

りん 2002/03/12(火) 14:13:04
[[解決]]
りんです。
試~1さん回答ありがとうございます。
試~1さんの方法で上手くいきました。
本当に助かりました!!
ありがとうございます。。。

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