アプリ版:「スタンプのみでお礼する」機能のリリースについて

InternetOpen, InternetOpenURL, InternetReadFileを用いてhttp上のファイルを読むことはできますが、単独の0x0Aまたは0x0Dがあると、それらを0x0D+0x0Aの2バイト(MS-DOSの改行コード)に変換してしまいます。読み取りたいのはバイナリファイルなので、この変換は不要ですが、この機能を外すオプションが分かりません。ネット検索してみましたが、Visual BasicではInternetReadFile の2番目の引数であるlpBufferをString型でなくByte型にするとバイナリにすることによりバイナリファイルを読み取り可能という情報は得られたのですが、C++についてはバイナリファイルを読み取る方法は発見できませんでした。InternetOpen, InternetOpenURL, InternetReadFileの引数も調査してみましたが、バイナリモードに該当するようなオプションは見つかりませんでした。

InternetOpen, InternetOpenURL, InternetReadFileを用いてhttp上のバイナリファイルを読みとる方法をご存知の方がいらしたら、その方法をご教示ください。また、それは不可能であると確認された方がいましたら、その情報をお知らせください。

なお、当方をBorlandのC++Builderを使用して、InternetOpen, InternetOpenURL, InternetReadFileを用いてhttp上のテキストファイルを読むところまでは順調に動作しています。

A 回答 (3件)

#1>0x0D+0x0Aに変換されてしまうのは0x0Aの場合のみでした


試しに、改行がLF(0x0A)で構成されるhtml ファイルで試してみましたが、そのような変換はされませんでした。(0x0Aのまま)
変換がされたと確認されているのは、InternetReadFile で取り込んだバッファの中を直接確認されているのですか?
    • good
    • 0
この回答へのお礼

ご指摘ありがとう御座います。おかげさまで解決しました。

まったく恥ずかしい話ですが、格納するファイルをOpenするときに"wb"とすべきところが、"w"になっていました。同じプログラムをテキストの読み取りに使ったとき、何かのトラブルがあって、一時的に"w"にしたのが、そのままになっていたようです。

お礼日時:2006/08/02 20:11

これはサーバ側の設定に依存します。


Webサーバはテキストをクライアントに送り出す際には改行コードをCRLFに変換します。
# これはインターネット上の取り決め(RFC)によります

ダウンロードするファイルがテキストかバイナリかはWebサーバの設定によりファイルの拡張子などで判断するようになっており、特に設定されていないファイルだとテキストとして扱うサーバもあります。(多分こっちが主流)
Webサーバの設定を見直し、ダウンロードするバイナリファイルを正しくバイナリファイルとして認識するようにしてください。
    • good
    • 0
この回答へのお礼

たしかにサーバー側の問題という可能性もありますね。しかし、拡張子を.jpgにしても結果は同じでした。

原因は当方の初歩的なミスであることが判明しましたので、問題は解決しました。

ありがとうございました。

お礼日時:2006/08/02 20:04

http://nienie.com/~masapico/api_sample_inet04_c. …
を参考にして、
C++Builder を使って、バイナリファイルを読み込んでみましたが、(特別な指定とか無くても)問題なく読み込めました。
    • good
    • 0
この回答へのお礼

回答、有難うございます。しかし、教えていただいた例の通りにしても、結果は変わりませんでした。

IternetOpenの2番目の引数とInternetOpenUrlの4番目の引数が私の使用していたものと異なるので、教えていただいた例と同じにしたのですが、結果は変わりませんでした。0x0Aの前に0x0Dが追加されてしまいます。

なお、質問では「0x0Dが0x0D+0x0A」に変換されてしまうと記述しましたが、これは間違いでした。0x0D+0x0Aに変換されてしまうのは0x0Aの場合のみでした。この場を借りて訂正させていただきます。

お礼日時:2006/08/02 08:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!