我创建了一个截屏程序和所有工作很大。 唯一的问题是,我不知道我怎样才能使它所以屏幕截图保存附加号码。
例如:截图1,截图2,截图3,截图4等
显然,这可以应用到其他文件被保存。 有任何想法吗? 谢谢。
我创建了一个截屏程序和所有工作很大。 唯一的问题是,我不知道我怎样才能使它所以屏幕截图保存附加号码。
例如:截图1,截图2,截图3,截图4等
显然,这可以应用到其他文件被保存。 有任何想法吗? 谢谢。
下面是我经常使用这种非常情况下的方法。 只是通过像“屏幕截图”的字符串,它会发现在“截图[数字]”的格式最低的可用文件名(或只是“截图”如果没有任何的话):
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;
}
(注:这是一个稍微简化版本,不带文件扩展名在内)。
有没有你正在使用数字的原因是什么? 将在同一文件夹后重新用于另一个会话? 如果该数字重新启动并替换现有文件如果一天有什么不同?
这些都是各种各样的东西要记住。 值得一提的是,OS X做截图时使用,以提供“图片1”,“图片2”,幸运的是在新的版本,它现在使用“截图上采取2009-12-08在11.35.12”或类似的东西,使容易按日期排序,很容易避免命名冲突等。
正如张贴在其他建议你还是需要做一个检查,如果该文件已经存在,而当你重试DateTime.Now会有所不同,因此文件名会有所不同。 当然,你不应该得到任何冲突,除非该截图是在同一毫秒或用户与日期/时间搞乱(或夏令可以惹你了太多)。
这里最初是由雷克斯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
这个类。
解汇总
将这项工作的吗?
这是我使用:
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");