creatでファイルを開くと・・・ – プログラミング – Home

creatでファイルを開くと・・・
 
通知
すべてクリア

[解決済] creatでファイルを開くと・・・


りん
 りん
(@りん)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

こんにちは。りんといいます。

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
 試~1
(@試~1)
ゲスト
結合: 23年前
投稿: 16
 

ファイルへのアクセスがテキストモードの場合、
ファイルから読み込みを行うと、
\r\nの二文字が1つの改行記号として扱われます。

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

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


返信引用
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

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


返信引用
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

48秒差で同じことを書いてしまいました。(^^;


返信引用
りん
 りん
(@りん)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

りんです。
試~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に変更する事によりそれに付随する
多大な個所を修正する必要があるからです。
(個人的な事ですみません!!)

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


返信引用
試~1
 試~1
(@試~1)
ゲスト
結合: 23年前
投稿: 16
 

_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)


返信引用
りん
 りん
(@りん)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

りんです。
試~1さん回答ありがとうございます。
試~1さんの方法で上手くいきました。
本当に助かりました!!
ありがとうございます。。。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました