2011-04-03 9 views
1

コーディングプラットフォーム:ASP.NET 4.0 C#ASP.NETを使用した意味のある自動名前変更ASP.NET

次のシナリオを検討してください。

"StackOverflow.doc"という名前のファイルをasp:FileUploadを使用してDocumentsフォルダにアップロードしています。
しかし、フォルダ文書にはすでに "StackOverflow.doc"という名前のファイルがあります。
このような状況では、ファイルの名前をStackOverflow(1).docに変更したいと思います。

GUIDを使用してファイル名を一意にする方法、または一時的な名前を割り当てる方法は分かっています。
私が必要とするのは、ソリューションのようなWindowsエクスプローラです。それに接近する最善の方法はどれですか?

P.S:ソリューションは冗長である必要があります。つまり、StackOverflow.docとStackOverflow(1).docという名前のファイルがある場合、名前を変更したファイルはStackOverflow(2).docになります。

答えて

3

ここでは、簡潔さのためにパスロジックは含まれていません):

string fileName = downloadFileName; 
string fileExt = downloadFileExtention; 

string fullFileName = string.Format("{0}.{1}", fileName, fileExt); 

int counter = 0; 
while(File.Exists(fullFileName)) 
{ 
    counter++; 
    fullFileName = string.Format("{0}({1}).{2}", fileName, counter, fileExt); 
} 

// Write the file to fullFileName 
+0

+1:私のロジックよりもはるかに簡単です。ところで、どちらが最適化されていますか?ループ中にファイルが存在するかどうかをチェックして一致するまで、またはフォルダ内のすべてのファイルのリストをList に持ってきて、そのリストに同じロジックを適用しますか? – naveen

+1

@yetanothercoder - すべてのファイルを最初にリストするという行を追加することを検討していました。これは、おそらくより速い(おそらく多くのディスクの代わりに1つのヒット)ためです。しかし、マルチスレッド環境でこれを行うと、その間に別のスレッドによって書き込まれたファイルを上書きする危険性があります(またはアクセス違反の例外が発生する危険性があります)。 – Oded

+0

ああ。非常に真実。私はそれについても考えていない。どうもありがとう :) – naveen

関連する問題