2

ディスクにダミーのファイルシステムを追加するプログラムを作成しています。

現在、を使用して可変サイズのファイルを書き込んでいますWriteFile

        WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
        err = GetLastError();

errは#1784を返します。これは次のように変換されます

指定されたユーザーバッファは、要求された操作に対して無効です。ERROR_INVALID_USER_BUFFER

したがって、最初の24ファイルについては、書き込み操作が機能します。ファイル#25がオンの場合、書き込み操作は失敗します。ファイルは引き続き作成されますが、WriteFile関数はファイルにデータを入力しません。

乗り越える方法について何かアイデアはありますERROR_INVALID_USER_BUFFERか?

エラーについて私が見つけることができるすべての参照は、クラッシュするプログラムに限定されており、それが私が経験している問題にどのように関連しているかを理解することはできません。

編集:

FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);

FileDataは、最大予測バッファーのサイズに設定および割り当てられます。iは、最大サイズ(k)まで増加するまで繰り返すループ変数です。

4

2 に答える 2

4

私の推測では、それはあなたがそこからバイトFileDataを書くのに十分な大きさではありません。ファイルのリストのループ制御変数はありますかi * 1024iその場合、FileDataファイルをループするときに一度に1Kずつ拡張する書き込みバッファが必要です。

これは珍しい構成です。ここでロジックが正しいと確信していますか?回答の精度を高めるために、より多くのコード(具体的には、とのすべての使用法)を投稿FileDataしてください。i

ここで常にチェックする必要はないことに注意してください。意味があると信頼する前に、のリターンコードGetLastErrorをチェックする必要があります。WriteFileそうしないと、コードの無関係な部分からエラーを拾う可能性があります-最後に失敗したものは何でも。

于 2011-06-30T15:48:16.573 に答える
2

エラー=1784が発生しました。これは、レコードのサイズを指定せずにファイルを開いてから、ファイルのブロック読み取りを行ったためです。

Reset( FileHandle );

する必要があります

Reset( FileHandle, 1 );
于 2011-12-03T19:23:35.957 に答える