我如何确保如果我关闭程序并再次运行,它会在新目录中创建新文件
本文关键字:文件 新目录 新文件 创建 何确保 确保 如果 关闭程序 运行 | 更新日期: 2023-09-27 18:27:40
我有这个方法:
private void CreateAnimatedGif(bool ToCreate)
{
string combined = null;
DirectoryInfo di = new DirectoryInfo(sf);
FileInfo[] fi = di.GetFiles("*.gif");
if (simtest == fi.Length - 1)
{
simtest = 0;
}
if (AnimatedGifFiles.Count == 0)
startTime = DateTime.Now;
if (ToCreate == false)
{
combined = Path.Combine(sf, fi[simtest].FullName);
AnimatedGifFiles.Add(combined);//last_file);
simtest += 1;
}
else
{
if (AnimatedGifFiles.Count > 1)
{
rainEventCounter += 1;
AnimatedGifDirectoryEvent = "Rain event " + rainEventCounter.ToString();
string eventDir = Path.Combine(AnimatedGifDirectory, AnimatedGifDirectoryEvent);
if (!Directory.Exists(eventDir))
{
Directory.CreateDirectory(eventDir);
}
string outputFile = System.IO.Path.Combine(
eventDir,
string.Format(
System.Globalization.CultureInfo.InvariantCulture,
"Event-{0:yyyy-MM-dd-HHmmss}_{1:yyyy-MM-dd-HHmmss}.gif", startTime, DateTime.Now
)
);
unfreezWrapper1.MakeGIF(AnimatedGifFiles, outputFile, 80, true);
}
AnimatedGifFiles.Clear();
}
}
在这一部分中,我每次都会创建要在outputFile
中创建的目录。
rainEventCounter += 1;
AnimatedGifDirectoryEvent = "Rain event " + rainEventCounter.ToString();
string eventDir = Path.Combine(AnimatedGifDirectory, AnimatedGifDirectoryEvent);
if (!Directory.Exists(eventDir))
{
Directory.CreateDirectory(eventDir);
}
问题是,当我再次运行程序时,rainEventCounter
为0,因此它将把新的outputFile
放在第一个现有目录中。我想让它做的是检查AnimatedGifDirectory
:中是否有任何目录
OK编辑:
我现在在类的顶部添加了一个变量字符串[]dirs在类构造函数中,我做了:
dirs = Directory.GetDirectories(AnimatedGifDirectory);
所以现在当我运行我的程序时,有0个子目录。但是,我再次运行程序,例如有3个目录。现在dirs
包含3个目录。
现在我希望下一次AnimatedGifDirectoryEvent
将是"Rain event 4"作为子目录名,而不是"Rain event 1"。
当然,如果dirs
长度为0,则AnimatedGifDirectoryEvent
将为"降雨事件1"。
有多种方法可以获取它。首先,您可以获取Directory数组的Length
,然后返回它。类似:
public static int GetNextNumber(string directoryPath)
{
var dirs = Directory.GetDirectories(directoryPath);
return dirs.Length + 1;
}
或者,您可以将目录名中的数字解析为int,从中获取Max
并返回+1。
public static int GetNextNumberWithParsing(string directoryPath)
{
var dirs = Directory.GetDirectories(directoryPath);
var number = dirs.Select(r => int.Parse(r.Replace("Rain event ", ""))).Max();
return number + 1;
}
然后在你的应用程序中调用它,比如:
rainEventCounter = GetNextNumberWithParsing(AnimatedGifDirectory);
使用第一种方法的唯一问题是,如果您的目录被删除(可能是由于某些清理工作),则Length可能会返回无效的目录名。考虑一下你是否有这样的目录:
Raise event 1
Raise event 2
Raise event 3
Raise event 4
然后,如果您使用dir.Length
,它将返回4,然后您可以使用dir.Length + 1
作为下一个名称。
但是,如果在这种情况下删除了目录1和2,那么您将获得长度2,并且您的下一个目录号将是3
,现在它将抛出一个错误,因为具有该名称的目录已经存在。
您在dirs
变量中拥有根目录中的目录数。使用dirs.Length + 1
设置新目录名。
AnimatedGifDirectoryEvent = "Rain event " + (dirs.Length + 1);