- ベストアンサー
InternetReadFileでバイナリファイルを読み込む方法
- InternetOpen, InternetOpenURL, InternetReadFileを用いてhttp上のバイナリファイルを読みとる方法をご存知の方がいらしたら、その方法をご教示ください。
- バイナリファイルを読み取る方法は発見できませんでした。InternetOpen, InternetOpenURL, InternetReadFileの引数も調査してみましたが、バイナリモードに該当するようなオプションは見つかりませんでした。
- 当方をBorlandのC++Builderを使用して、InternetOpen, InternetOpenURL, InternetReadFileを用いてhttp上のテキストファイルを読むところまでは順調に動作しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1>0x0D+0x0Aに変換されてしまうのは0x0Aの場合のみでした 試しに、改行がLF(0x0A)で構成されるhtml ファイルで試してみましたが、そのような変換はされませんでした。(0x0Aのまま) 変換がされたと確認されているのは、InternetReadFile で取り込んだバッファの中を直接確認されているのですか?
その他の回答 (2)
- rinkun
- ベストアンサー率44% (706/1571)
これはサーバ側の設定に依存します。 Webサーバはテキストをクライアントに送り出す際には改行コードをCRLFに変換します。 # これはインターネット上の取り決め(RFC)によります ダウンロードするファイルがテキストかバイナリかはWebサーバの設定によりファイルの拡張子などで判断するようになっており、特に設定されていないファイルだとテキストとして扱うサーバもあります。(多分こっちが主流) Webサーバの設定を見直し、ダウンロードするバイナリファイルを正しくバイナリファイルとして認識するようにしてください。
お礼
たしかにサーバー側の問題という可能性もありますね。しかし、拡張子を.jpgにしても結果は同じでした。 原因は当方の初歩的なミスであることが判明しましたので、問題は解決しました。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
http://nienie.com/~masapico/api_sample_inet04_c.html を参考にして、 C++Builder を使って、バイナリファイルを読み込んでみましたが、(特別な指定とか無くても)問題なく読み込めました。
お礼
回答、有難うございます。しかし、教えていただいた例の通りにしても、結果は変わりませんでした。 IternetOpenの2番目の引数とInternetOpenUrlの4番目の引数が私の使用していたものと異なるので、教えていただいた例と同じにしたのですが、結果は変わりませんでした。0x0Aの前に0x0Dが追加されてしまいます。 なお、質問では「0x0Dが0x0D+0x0A」に変換されてしまうと記述しましたが、これは間違いでした。0x0D+0x0Aに変換されてしまうのは0x0Aの場合のみでした。この場を借りて訂正させていただきます。
お礼
ご指摘ありがとう御座います。おかげさまで解決しました。 まったく恥ずかしい話ですが、格納するファイルをOpenするときに"wb"とすべきところが、"w"になっていました。同じプログラムをテキストの読み取りに使ったとき、何かのトラブルがあって、一時的に"w"にしたのが、そのままになっていたようです。