バイナリファイルのデータを読み込もうとしていますが、悲しいことにC++で開かれているデータは、バイトモードであるため、pythonとは大きく異なります。それはC + +はそれを持っていないようです。バイナリファイルをC++のバイトモードで読むことができません
for (auto p = directory_iterator(path); p != directory_iterator(); p++) {
if (!is_directory(p->path()))
byte tmpdata;
std::ifstream tmpreader;
tmpreader.open(desfile, std::ios_base::binary);
int currentByte = tmpreader.get();
while (currentByte >= 0)
{
//std::cout << "Does this get Called?" << std::endl;
int currentByte = tmpreader.get();
tmpdata = currentByte;
}
tmpreader.close()
}
else
{
continue;
}
私は基本的に'rb'
モードでファイルを開くのPythonのメソッドのクローンをしたいです。すべての内容の実際のバイトデータを持つことができます(これはC++でも印刷できない文字があるため読み込みできませんが、DLL内でフィードする必要があるzlib圧縮データが含まれているため、しかしfopen
が減価償却される
file_object = open('[file here]', 'rb')
は、これに上記のC++コードを交換しても役立つことが判明したが、私は気にしない:それはすべてを解凍する
を私はPythonで、私はこのような何かを行うことができますことを知っています。
上記のコードでは、バッファデータから読み取っていなかったため、作業ができませんでした。私は後で、fopen
、fseek
、fread
、fclose
が私が読取りバイトモード( 'rb')に必要な機能であることを理解しました。
for (auto p = directory_iterator(path); p != directory_iterator(); p++) {
if (!is_directory(p->path()))
{
std::string desfile = p->path().filename().string();
byte tmpdata;
unsigned char* data2;
FILE *fp = fopen("data.d", "rb");
fseek(fp, 0, SEEK_END); // GO TO END OF FILE
size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET); // GO BACK TO START
data2 = new unsigned char[size];
tmpdata = fread(data2, 1, size, fp);
fclose(fp);
}
else
{
continue;
}
投稿したコードの問題点は何ですか? – Martin
それは私が欲しいものを正確にはしません、例えば、間違ったものを取得し、それはまったくファイルからデータを全く得ていないようです。 – PSXGamerPro1
問題文が単純に「動作しない」場合は、ソリューションを提供することは困難です。実際の結果とどのように違うのか、そしてどのようなことが起こるのかをより完全に説明するために質問を編集してください。何が良い説明になるかについてのヒントについては、[ask]を参照してください。 –