2011-06-30 12 views
1

このようなプロトタイプを持つJavaで関数を設計したいと思います。JavaプログラムからWindows上のファイルのバージョンを見つける方法は?

フルパスをすることができ
public String FindVersion(String FullPath) 
{ 

} 

:すべてのファイルはバージョン管理を追跡しませC:\tmp\readme.txt またはC:\windows\system32\xcopy.exe またはC:\windows\system3

+1

ようこそ。コードを書式化するには、エディタで '{}'ボタンを使います。インラインコードの場合はバッククォートを使用します。また、あなたの質問は非常に明確ではありません。たとえば、 "ファイルのバージョン"とはどういう意味ですか? –

+1

私は、テキストファイルとディレクトリに 'バージョン'があることを知らなかった。実行可能ファイルの中には、(報告する)バージョンを持っていないものもあります。 –

+3

バージョンの意味を知る必要があります。 – Marcelo

答えて

0

のように、平均的なテキストファイルは、それが持っている何回エンコードしたファイルまたは外部内に保存された概念がありません編集されました。

ドキュメントによっては、有効になっている場合、ドキュメント内にバージョン情報を保存することがあります。これらのファイルの場合、ルーチンは、一部のドキュメントがバージョン管理されますが、バージョン管理情報が文書内に格納されていない、それは独立のバージョン情報を追跡するシステムに格納されて

public String FindVersion(String filepath) { 
    check to see if file type can be deduced; 
    check to see if the deduced file type supports versioning; 
    check to see if the file has versioning information; 
    go through the revisions of the file and report the latest one; 
} 

(擬似コードで)のようになります。ドキュメント。このような場合には、実際には文書よりも権威のある改訂管理システムに対処する必要があります。しばしば、そのようなシステムは、制御された文書のどのバージョンが最後に収集されたかを示すユーティリティを有する。最も近いものを探しているすべてのリビジョンに対してドキュメントを照会する必要がある場合もあります。

基本的には、すべての状況に対して1つの方法はありません。

+0

回答ありがとうございます。 .dll、.exe、および.sysファイルのみに興味があるとすればどうなりますか? 現在、私は1つのVBscriptを作成し、それをJavaプログラムから呼び出してから、VBScript出力からバージョンを収集します。 他の方法はありますか? –

1

FileVersionInfoはWin32 APIなので、JNIといくつかのCコードを使用してアクセスするか、外部ライブラリを使用する必要があります。 SigarというAPIがあります。これはできると思われます。

1

あなたが求めている詳細は、Javaが動作するオペレーティングシステムのファイルシステムに固有のものです。 Java 7(java.nio.file.attribute)まで。この情報を提供するAPIはありません。唯一のオプションは、JNIインターフェースを介してWin 32 APIを使用することです。

+0

Windows APIはGetFileVersionInfoです(http://msdn.microsoft.com/en-us/library/windows/desktop/ms647003(v=vs.85).aspx)。 – plusjeff

関連する問題