1

名前のない画像があり、この画像を特定のフォルダーにデフォルト名 (image1、image2 など...) で直接保存したい。現在、このコードを使用して画像を手動で保存しています。

   if (imageOpened == true)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "PNG Files(*.png)|*.png";

            if (sfd.ShowDialog() == DialogResult.OK)
                imagePanelControl.SaveImage(sfd.FileName);
        }
        else
            MessageBox.Show("Load a file before saving!");

        imagePanelControl.Invalidate();
    } 

どうやってやるの?

4

1 に答える 1

1

必要なものを見つけてみましょう: まず、パターン "image{ONE or MORE DIGIT}.png" に一致するすべてのファイルを見つける必要があります。

Regex reg = new Regex(@"image(\d)+[.]");
var list = Directory.GetFiles(dir, "*.png").Where(path => reg.IsMatch(path)).ToList();

ファイルが存在するかどうかを確認し、存在する場合は「image1.png」を返します。コードは次のとおりです。if (list.Count == 0) return "image1.png";

最後のステップは最後の番号を見つけることです。そのため、リスト内のファイルから番号以外のすべてを削除し、リストを並べ替え、最後に取得する必要があります。コードは次のとおりです。

list.Select(x => (new FileInfo(x)).Name.Replace("image", "").Replace(".png", "")).OrderBy(x => x).Last();

最後のステップは、上記の値を解析して追加することです。最終的なコードは次のとおりです。

        private static string GetNewFileName(string dir)
        {
            Regex reg = new Regex(@"image(\d)+[.]");

            var list = Directory.GetFiles(dir, "*.png").Where(path => reg.IsMatch(path))
                     .ToList();

            if (list.Count == 0)
                return "image1.png";

            var lastName =
                list.Select(x => (new FileInfo(x)).Name.Replace("image", "").Replace(".png", "")).OrderBy(x => x).Last();

            return string.Format("image{0}.png", int.Parse(lastName)+1);
        }

;

于 2013-04-11T06:09:58.867 に答える