1

cURL経由でいくつかのファイルをダウンロードするための別のスレッドを起動するMFCアプリがあります。最初に、ファイル サイズと最終書き込み時刻を含むテキスト ファイルをダウンロードします。次に、ディスク上のファイルをチェックし、値が異なる場合はダウンロードするためにキューに入れます。問題は次のとおりです。スレッド内の CreateFile 呼び出しは、任意に INVALID_HANDLE_VALUE を返します。私は常に、CreateFile() が成功した後に CloseHandle() を実行します。失敗したファイルはランダムです。ルートディレクトリのファイルの場合もあれば、ネストされたディレクトリのファイルの場合もあります。この問題は、ローカリゼーションやディレクトリ/ファイル名とは関係ありません。すべてのチェックがパスする場合とパスしない場合があるためです。GetLastError() は、それぞれ「ファイルが見つかりません」/「パスが見つかりません」である 2 または 3 を返します。

ファイルの書き込み時間とサイズをチェックする関数を OnInitDialog() 関数に直接入れると、すべてが機能します。これはマルチスレッドの問題のようなにおいがしますが、メモリ割り当てからファイル ハンドルまですべてを再確認しました。

同じコードがコンソール アプリケーションでも別のスレッドで機能します。

プラットフォームは Win7 64bit です。
ランタイムと MFC に静的にリンクします。

4

1 に答える 1

1

私の場合、 GetCurrentDirectory() はしばらくして system32 パスを返したため、資格情報のためにコードが失敗しました。ファイルパスを手動で決定することで問題を修正しました(最初にexeパスを取得し、そこから使用します...)。ディスク上の特権的な場所への書き込み/読み取りを試みていないことを確認してください。パスを確認してください。

于 2012-05-10T08:04:34.593 に答える