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 回答