C# – 将数字附加到要保存的文件

我创建了一个截图程序,一切都很好。 唯一的问题是,我不知道如何制作它所以屏幕截图保存附加数字。

示例:屏幕截图1,屏幕截图2,屏幕截图3,屏幕截图4等。

显然,这可以应用于其他正在保存的文件。 有任何想法吗? 谢谢。

这是我经常用于这种情况的方法。 只需传入一个像“截图”这样的字符串,就会找到“Screenshot [number]”格式的最低可用文件名(如果还没有,则只显示“截图”):

private string GetUniqueName(string name, string folderPath) { string validatedName = name; int tries = 1; while (File.Exists(folderPath + validatedName)) { validatedName = string.Format("{0} [{1}]", name, tries++); } return validatedName; } 

(注意:这是一个略微简化的版本,不考虑文件扩展名)。

你有使用数字的原因吗? 以后会为同一个文件夹重新使用同一个文件夹吗? 如果日期不同,数字是否应重新启动并替换现有文件?

这些都是要记住的事情。 值得注意的是,操作系统X在进行屏幕截图时曾经提供“图片1”,“图片2”,幸好在新版本中,它现在使用“2009-12-08 at 11.35.12截取的截图”或类似内容,允许更容易按日期排序,轻松避免命名冲突等

正如其他建议中所述,您仍然需要检查文件是否已存在,以及何时重试DateTime.Now将不同,因此文件名将不同。 当然你不应该有任何冲突,除非截图是在相同的毫秒内或者用户正在弄乱日期/时间(或者夏令时也可能弄乱你)。

这是Rex M最初提出的一个改进的解决方案。它将生成文件名,如实际问题中所述:

 public string GetUniqueName(string name, string folderPath) { string pathAndFileName = Path.Combine(folderPath, name); string validatedName = name; int count = 1; while(File.Exists(Path.Combine(folderPath, validatedName))) { validatedName = string.Format("{0}{1}{2}", Path.GetFileNameWithoutExtension(pathAndFileName), count++, Path.GetExtension(pathAndFileName)); } return validatedName; } 

由于您正在编写文件,因此一种方法是搜索当前的保存目录并找到名为ScreenshotXX的最新文件,并使用正则表达式从名称中获取数字。

您可以将DirectoryInfo类与Regex类一起使用。

解决方案摘要

  1. Directory.GetFiles(目标);
  2. 排序文件名称
  3. 分析上一个文件名,找到你使用的最后一个号码
  4. 写下一个附加了下一个数字的文件。

这会对你有用吗?

这就是我用的:

string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string newPath; List files = new List(Directory.GetFiles(path,"*.txt",SearchOption.TopDirectoryOnly)); for(int i=0; files.Contains(newPath=string.Format(path + @"\textfile{0}.txt",i)); i++) { Console.WriteLine("File:{0} exist skipping....", newPath); } File.WriteAllText(newPath,"dummy");