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

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

WBOY
リリース: 2024-02-09 10:24:20
転載
1113 人が閲覧しました

使用使用 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート