2009-06-02 13 views
0

を作成すると、出力ファイルが既に存在するというメッセージが表示されず、しかし、それは、ファイル名の末尾に(1)を使用して新しいファイルを作成します...既存のファイルと同じ名前の新しいファイルを作成すると、Windows環境およびいくつかのアプリケーションで「新規ファイルWindows」の動作

name.doc 

name(1).doc 

私はC#で同じ動作を作成しようとしていると、私の質問があるだろう...このコードをすべて減らすことはできますか?

FileInfo finfo = new FileInfo(fullOutputPath); 
if (finfo.Exists) 
{ 
    int iFile = 0; 
    bool exitCreatingFile = false; 
    while (!exitCreatingFile) 
    { 
    iFile++; 
    if (fullOutputPath.Contains("(" + (iFile - 1) + ").")) 
     fullOutputPath = fullOutputPath.Replace(
       "(" + (iFile - 1) + ").", 
       "(" + iFile + ")."); // (1) --> (2) 

    else 
     fullOutputPath = fullOutputPath.Replace(
       Path.GetFileNameWithoutExtension(finfo.Name), 
       Path.GetFileNameWithoutExtension(finfo.Name) + "(" + iFile + ")"); // name.doc --> name(1).doc 

    finfo = new FileInfo(fullOutputPath); 
    if (!finfo.Exists) 
     exitCreatingFile = true; 
    } 
} 

答えて

2

方法(のFileInfoコンストラクタを中心に扱う以降の例外を追加することなく)について:

FileInfo finfo = new FileInfo(fullOutputPath); 
int iFile = 1; 
while (finfo.Exists) 
{ 
    finfo = new FileInfo(
     Path.GetFileNameWithoutExtension(fullOutputPath) + 
     "(" + iFile + ")" + 
     Path.GetExtension(fullOutputPath)); 
    iFile++; 
} 
// Optionally add fullOutputPath = finfo.Name; if you want to record the final name used 
+0

多くのクリーナー:)ありがとう – balexandre

+0

当然、元の方法よりも優れています。 FileInfoオブジェクトから利用できるので、名前を別々に保存する必要はありません。 –

+0

元のコードが具体的にインプレースでそれを更新していたので、 'fullOutputPath'が引き続き使用されるかどうかはわかりませんでした。 – jerryjvl

2

私は、ファイルメニューの実装の詳細のほとんどを処理するWinformsコントロールを作成しました。私はそれがより少ないコードを使用するとは思わないが(implementaitonは異なるが)、あなたは一見を望むかもしれない。

FileSelect制御

+0

thxsのWinFormsを開発する際に、私は心を持っているでしょう! – balexandre

関連する問題