こんにちは。りんといいます。
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です。
宜しくお願い致します。
ファイルへのアクセスがテキストモードの場合、
ファイルから読み込みを行うと、
\r\nの二文字が1つの改行記号として扱われます。
従って、ファイルへ書き込む場合も
\rと\nそれぞれに対して
\r→\r\n
\n→\r\n
と変換され、結果として改行二つになってしまいます。
なので、バイナリモードを指定すれば良いわけで、
_fmode変数をバイナリ変換用(_O_BINARY)に設定すれば良いはずです。
バイナリでオープンしてますか?
テキストでオープンしてるとダメかも。
てか、「どうして\nじゃだめか」という根本的な問題が
かかれていないのでなんとも答えようがないというほうが
正直な回答ですが。
48秒差で同じことを書いてしまいました。(^^;
りんです。
試~1さんいもちぃさん回答ありがとうございます。
①creat(FILE_TMPMRCFD , _S_IWRITE | _O_BINARY)
②creat(FILE_TMPMRCFD , _O_BINARY)
③open(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT , _S_IWRITE | _O_BINARY)
④open(FILE_TMPMRCFD , _O_WRONLY | _O_CREAT , _O_BINARY)
①、②、③、④共にやっぱりだめなのですが・・・。
んーーーなぜなのでしょう??
いもちぃさんヘ
「どうして\nじゃだめか」と言う事ですが、
CRLFを\nに変更する事によりそれに付随する
多大な個所を修正する必要があるからです。
(個人的な事ですみません!!)
回答の程、宜しくお願い致します。
_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)
りんです。
試~1さん回答ありがとうございます。
試~1さんの方法で上手くいきました。
本当に助かりました!!
ありがとうございます。。。