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