掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイナリファイルを転送するには? (ID:63017)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
9/8に質問した↓の続きです。 http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200609/06090018.txt バイナリファイルの転送がうまくいっていると思っていたのですが、 実際はうまくいっていないようなので、どなたかアドバイス宜しくお願いします。 【やろうとしたこと】 シリアル通信を使って、パソコンAからBにバイナリファイルを転送する。 Bではハイパーターミナルの「テキストのキャプチャ」を使う。 そのとき、 パターン1・・1byte読んで1byte書き込む パターン2・・パターン1では転送速度が遅くなるので、バッファに318byte 読み込んで318byte書き込む 【結果】 送信ファイルと受信ファイルを比較すると、ファイルの中身はパッと見は一緒。 でもじっくり検証すると、中身もバイト数も違う。 送162196byte 受162253byte 自分でもいろいろ調べてみてるのですが。。 根本的にやりかたが違っているのでしょうか。。 行き詰ってしまったので、どなたかご教授宜しくお願いいたします。 ソース --------------------------------------------------------------------- hComm = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //COM通信パラメータを格納しているDCB構造体を設定する。 DCB lpDCB; GetCommState(hComm, &lpDCB); lpDCB.DCBlength = sizeof(DCB); lpDCB.BaudRate = 9600; lpDCB.Parity = NOPARITY; lpDCB.StopBits = ONESTOPBIT; lpDCB.fParity = FALSE; lpDCB.fBinary = TRUE; lpDCB.ByteSize = 8; --------------------------------------------------------------------- FILE *fi; DWORD dw; unsigned char charbuf; unsigned char charbuf2[318]; int a[16]; if ((fi = fopen("hoge.hoge", "rb")) == NULL) { AfxMessageBox("Cannot open input file"); return; } /*ヘッダ部の読み込み*/ /*前回の質問の通り、データ部の総バイト数がわかる。*/ for(int i=0; i < 16;i++){ fread(&charbuf, 1, 1, fi); a[i] = charbuf; WriteFile(hComm,&charbuf,1,&dw,0); } int count = 0,size = 0; /*パターン1*/ /*ファイルの書き込み*/ for(int i = 0; i < (a[4]*256+a[5])*(a[6]*256+a[7]); i++){ size = fread(&charbuf, 1, 1, fi); WriteFile(hComm,&charbuf,size,&dw,0); } // /*パターン2*/ // /*ファイルの書き込み*/ // for(int i = 0; i < (a[4]*256+a[5])*(a[6]*256+a[7])/318; i++){ // size = fread(charbuf2, 1, 318, fi); // WriteFile(hComm,charbuf2,318,&dw,0); // } AfxMessageBox("転送終了しました。"); fclose(fi); return; ---------------------------------------------------------------------
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.