0

Windows環境およびいくつかのアプリケーションでは、既存のファイルと同じ名前で新しいファイルを作成すると、出力ファイルが既に存在するというメッセージは表示されませんが、(1)で新しいファイルが作成されます。ファイル名の終わり...

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;
  }
}
4

2 に答える 2

2

ファイルメニューの実装の詳細のほとんどを処理するWinformsコントロールを作成しました。使用するコードが少ないとは思いませんが(実装方法は異なりますが)、ご覧になることをお勧めします。

FileSelectコントロール

于 2009-06-02T11:39:57.053 に答える
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
于 2009-06-02T11:42:19.217 に答える