2017-06-09 5 views
0

私はMVC C#をやっています。私はユーザーがcsvファイルをアップロードするウェブページを手に入れました。アップロードしてデータを保存した後、アップロードされたファイルを同じ名前で移動するコードをサーバーの別のフォルダに書き込んだり、別のフォルダには意味がない場合は、新しいフォルダを作成するコードを記述します。今、問題は、移動後、ユーザーがすぐに別のファイルをアップロードすると、エラーメッセージが「File Exists」になるということです。私のシニアは私にmovepathファイルに秒/ミリ秒を追加すると言った。誰かが時間を追加する方法を助けることができますか?移動するファイルをアップロードする際に「秒」で撮影した時間を設定する方法は?

私のコードは

string Name = Path.GetFileNameWithoutExtension(loadPath); 
      Name = string.Format("{0}_{1}_{2}.csv", Name, SessionUtil.LoginUser.UserId, DateTime.Now.ToString("ddMMMyyyyHHmm")); 
         string MovePath = System.IO.Path.Combine(Output, Name); 

      if (!System.IO.Directory.Exists(Output)) 
      { 
       System.IO.Directory.CreateDirectory(Output); 
       System.IO.File.Move(loadPath, MovePath); 
      } 
      else 
      { 
       System.IO.File.Move(loadPath, MovePath); 
      } 

答えて

2

DateTime.Now.ToString("ddMMMyyyyHHmm")DateTime.Now.ToString("ddMMMyyyyHHmmss")?したがって、ユーザーが即時アップロードした場合、ファイル名は秒間隔のため同じにならないでしょうか?

+1

また、「ddMMMyyyyHHmmssfff」にはミリ秒も含まれます。 –

+0

はい。そのため、ファイルをアップロードするたびに、その名前が秒の間隔のために一意になるほど近くになります。 – Joseph

+0

これはより速く働いています。私はssのみを含んでいます。本当にありがとう – Ben77

0

あなたが転送後に少し時間を燃焼させるために、このような何かをするためにあなたのシニアは、おそらく(非常に最後の行を参照)を意味している:

string Name = Path.GetFileNameWithoutExtension(loadPath); 
Name = string.Format("{0}_{1}_{2}.csv", Name, SessionUtil.LoginUser.UserId, DateTime.Now.ToString("ddMMMyyyyHHmm")); 
string MovePath = System.IO.Path.Combine(Output, Name); 
if (!System.IO.Directory.Exists(Output)) 
{ 
    System.IO.Directory.CreateDirectory(Output); 
} 
System.IO.File.Move(loadPath, MovePath); 
System.Threading.Thread.Sleep(250); // sleeps the thread for 250 msecs 

EDIT

int sleepSeconds = 2; // sleep for 2 seconds after moving file 
string Name = Path.GetFileNameWithoutExtension(loadPath); 
Name = string.Format("{0}_{1}_{2}.csv", Name, SessionUtil.LoginUser.UserId, DateTime.Now.ToString("ddMMMyyyyHHmm")); 
string MovePath = System.IO.Path.Combine(Output, Name); 
if (!System.IO.Directory.Exists(Output)) 
{ 
    System.IO.Directory.CreateDirectory(Output); 
} 
System.IO.File.Move(loadPath, MovePath); 
System.Threading.Thread.Sleep(sleepSeconds * 1000); // sleeps the thread for sleepSeconds seconds 
+0

ありがとう、私はコードを説明することができますし、1秒、2秒のように秒を追加する方法もありますか? – Ben77

+0

確かに。秒を1000秒に掛けることで、スレッドを一時停止する必要がある秒数をミリ秒(「Sleep()」メソッドのパラメータとして取る)に変換することができます。 – STLDeveloper

+0

@STLDeveloperには本当にありがとうございますが、回線やスリープを実装する人はいないので@J Alcメソッドを使用しました。 – Ben77

関連する問題