自动将图像保存到具有用户定义名称的文件夹中

时间:2013-04-11 05:36:29

标签: c# winforms

我有一个没有任何名字的图像,我想直接将此图像保存在具有默认名称的特定文件夹中(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();
    } 

我该怎么做?

1 个答案:

答案 0 :(得分:1)

让我们试着找出我们需要的东西: 首先,我们需要找到所有匹配模式“image {ONE或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);
        }