ホームページ  >  記事  >  バックエンド開発  >  GetFileVersionInfoSize で初期化されたハンドルを使用して GetFileInformationByHandle を呼び出すと、「無効なハンドル」エラーが発生する

GetFileVersionInfoSize で初期化されたハンドルを使用して GetFileInformationByHandle を呼び出すと、「無効なハンドル」エラーが発生する

WBOY
WBOY転載
2024-02-09 10:24:201100ブラウズ

使用使用 GetFileVersionInfoSize 初始化的句柄调用 GetFileInformationByHandle 时出现“句柄无效”错误

php Xiaobian Yuzai は、GetFileVersionInfoSize によって初期化されたハンドルを使用して GetFileInformationByHandle を呼び出したときに、「無効なハンドル」エラーが発生しました。このエラーは通常、ハンドルがファイル情報を正しく識別していないことが原因で発生します。この問題を解決するには、ハンドルが正しく初期化されているかどうかを確認する、ファイル パスが正しいことを確認する、ファイルがすでに別のプロセスによって占有されているかどうかを確認するなど、いくつかの方法があります。注意深く調査して処理することにより、この問題は解決され、ファイル情報をスムーズに取得できるようになります。

質問内容

Windowsのgoを使用して、ファイルの作成時刻を含むファイル情報をプログラムで取得しようとしています。

golang.org/x/sys/windows で、ファイルが作成されたときの情報を返す関数を見つけました。関数は getfileinformationbyhandle (go ドキュメント、Windows API ドキュメント) )。ただし、この関数を使用して作成したコードでは、ハンドルが無効です エラーが発生しました。

これは私のコードです:

リーリー

これを実行すると、次の出力が得られます:

リーリー

ファイル パスが有効であることを確認しました (さらに、

os.stat 呼び出しではエラーが返されません):

system32 ディレクトリは 32​​ ビット Windows プログラムには表示されないことはわかっていますが、git-bash の

file ツールを使用して、実行可能ファイルが 64 ビット プログラムであることを確認しました。 リーリー パスは有効であるはずなので、無効なハンドルを取得するような間違った操作を行っている可能性がありますか?

解決策

この回答

に基づいて、作成時間を取得する別の方法を見つけました: リーリー 出力:

リーリー

この出力は、ファイル プロパティ ビューの作成時間と一致します。

filetime 自体は 1601 年 1 月 1 日 UTC のものですが、time.unix および nano秒 機能 1970 年 1 月 1 日 (UTC) からの時間に基づきます。

以上がGetFileVersionInfoSize で初期化されたハンドルを使用して GetFileInformationByHandle を呼び出すと、「無効なハンドル」エラーが発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。