2016-06-15 8 views
-1

アプリケーションでは、保存されたファイルを開くことができます。 私の目標は、ファイルが既に開いているかどうかをチェックし、同じファイルを同時に変更することができないように、ローカルコピーが作成された場合に限り、ファイルを再度開くことができるようにすることです。フォルダ内のファイルのコピーを作成し、自動コピーC#の名前を取得するには?

次のようなワークフローは次のようになります。

if (File.Exists(strFileName)) 
    bCreateCopy = AlertBox.Display("File already open. Work on a copy?", true/false); 

if (bCreateCopy == true) 
{ 
    strNewAutomaticFileName = createAutomaticFileName (sourceFile) 
    File.Copy(sourceFile, strNewAutomaticFileName); 
} 

は、私が「createAutomaticFileName()」に必要なものない方法はありますか?

私は典型的なcannonical名の作成を考えていた:

sourceFile - copy 
sourceFile - copy (1) 
sourceFile - copy (2) 

は、この目的を達成するためのより良い回避策はありますか?

+1

'File.Exists()はファイルが開いていることをどのように示していますか? – itsme86

+0

研究をしてください。あなたが見て2分を取る場合は、多くの答えがあります。 http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use AND http://stackoverflow.com/questions/13049732/automatically-名前を変更した場合はファイルが既に存在するWindowsの場合 –

+0

このコードが実際に書かれた言語は何ですか? –

答えて

1

私は適切なあなたがして何かしようと理解している場合:あなたはすでに最初のファイルが存在を知って後にそれを使用する必要があります。もちろん、

if (File.Exists(strFileName)) 
{ 
    bCreateCopy = AlertBox.Display("File already open. Work on a copy?", true/false); 
} 

if (bCreateCopy == true) 
{ 
    strNewAutomaticFileName = createAutomaticFileName(sourceFile) 
    File.Copy(sourceFile, strNewAutomaticFileName); 
} 

... 

private string createAutomaticFileName(string filePath, int count = 1) 
{ 
    var pathWithoutExtension = Path.Combine(Path.GetDirectoryName(filePath), Path.GetFileNameWithoutExtension(filePath)); 
    var newFilePath = String.Format("{0} - copy ({1}){2}", pathWithoutExtension, count, Path.GetExtension(filePath)); 

    if (File.Exists(newFilePath)) 
    { 
     return createAutomaticFileName(filePath, ++count); 
    } 

    return newFilePath; 
} 

:これも拡張機能をサフィックスします

public string createAutomaticFileName(string sourceFile) 
{ 
    var done = true; 
    int i = 0;  
    while (done) 
    { 
     var newFileName = (i == 0) ? string.Format("{0} - copy ", sourceFile) : string.Format("{0} - copy ({1})", sourceFile, i.ToString()); 
     if (!File.Exists(newFileName)) 
     { 
      return newFileName; 
     } 
     i++; 
    } 
} 
0

をあなたの例のように。

関連する問題