我创建了一个截图程序,一切都很好。唯一的问题是,我不知道如何制作它,所以屏幕截图会附加数字保存。
示例:屏幕截图1,屏幕截图2,屏幕截图3,屏幕截图4等
显然,这可以应用于正在保存的其他文件。有任何想法吗?谢谢。
答案 0 :(得分:11)
这是我经常用于这种情况的方法。只需传入一个像“截图”这样的字符串,它会以“屏幕截图[数字]”的格式找到最低的可用文件名(如果还没有,则只显示“屏幕截图”):
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;
}
(注意:这是一个略微简化的版本,不考虑文件扩展名。)
答案 1 :(得分:3)
你有使用数字的原因吗?稍后会为同一个文件夹重新使用同一个文件夹吗?如果日期不同,数字是否应重新启动并替换现有文件?
这些是要记住的事情。值得注意的是,操作系统X在进行屏幕截图时曾经提供“图片1”,“图片2”,幸好在新版本中,它现在使用“2009-12-08 at 11.35.12截取的屏幕截图”或类似内容,允许更容易按日期排序,轻松避免命名冲突等。
正如其他建议中所述,您仍然需要检查文件是否已存在,以及何时重试DateTime.Now将不同,因此文件名将不同。当然你不应该有任何冲突,除非截图是在相同的毫秒内或者用户正在弄乱日期/时间(或者夏令时也会让你感到困惑)。
答案 2 :(得分:2)
这是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;
}
答案 3 :(得分:0)
由于您正在编写文件,因此一种方法是搜索当前的保存目录并找到名为ScreenshotXX的最新文件,并使用正则表达式从名称中获取数字。
您可以将DirectoryInfo
类与Regex
类一起使用。
答案 4 :(得分:0)
解决方案摘要
这对你有用吗?
答案 5 :(得分:0)
这就是我使用的:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string newPath;
List<string> files = new List<string>(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");