2011-01-27 11 views
2

ファイル名が有効であり、衝突がないように、ファイルパスをファイル名でエンコードするにはどうすればよいですか?言い換えれば:「:」または「/」ファイルパスをファイル名にエンコードする方法は? (衝突なし、クロスプラットフォーム)

  • 結果のファイル名は、「\」、などの特殊文字が含まれていません。
  • 2つの異なるファイルパスが同じファイル名にエンコードされることはありません。

例:ファイルパス "C:\プログラムファイル\マイプログラム" - >ファイル名 "NGQqKY4pBaP7lPKQPD6Y ..."

この例は、単に例示のためのものです。これを行うにはより良い(そして簡単な)方法があるかもしれません。

問題の背景:このファイルパスエンコーディングは、Javaの単純な単一インスタンスチェックに使用されます。プログラムの2つのインスタンスは、異なるディレクトリにある場合は同時に実行できますが、同じディレクトリにある場合は実行できませんディレクトリ。 私はシングルインスタンスのプロパティを保証する他の方法があることは知っていますが、ファイルパスのエンコーディングは、私の特定の状況でコスト・ベネフィット・レシオの点で最高であるとわかります。

% -> %% 
\ -> %) 
/-> %(
: -> %; 

これ以上の特殊文字が、それでも役に立つと読める:

答えて

2

は次のように、ただスペシャルパスとエンコードの文字列を使用します。しかし、あなただけかもしれ独自性、優れた(しかし反転可能ではない解決策を)確認したいので、私はいくつかの%のファイルとファイルシステム内のいくつか/ファイルがあるだろうとは思わない

: -> ; 
\ -> % 
/-> % 
% -> % 

ので、このあなたのためにうまくいくかもしれません。

+1

しかし、C:\ foo \ bar.txtとC:\ foo%)bar.txtは同じ名前になります。 – Marii

+0

私の最初の変換を使用してください。私は2番目に行くでしょう.NON ONEは彼のフォルダにbar.txtというファイルがあり、そしてfoo/bar.txtという名前のフォルダ/ファイルがあるからです。 – Daniel

+0

はい、そうです。最初の変換で十分です。 :) – Marii

関連する問題