我有这个方法:
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
中是否有任何目录:
确定编辑:
我现在在类的顶部添加了一个变量string [] dirs 在类构造函数中我做了:
dirs = Directory.GetDirectories(AnimatedGifDirectory);
现在,当我运行我的程序时,有0个子目录。
但后来我重新运行程序,例如3个目录。
现在dirs
包含3个目录。
现在我希望下一次AnimatedGifDirectoryEvent
将会是"雨事件4"作为子目录名而不是" Rain事件1"试。
当然,如果dirs
长度为0,则AnimatedGifDirectoryEvent
将为" Rain事件1"。
答案 0 :(得分:3)
您有多种方法可以获得它。首先,您可以获取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
,现在它将抛出一个错误,因为具有该名称的目录已经存在。
答案 1 :(得分:2)
您在dirs
变量的根目录中拥有目录数。使用dirs.Length + 1
设置新目录名称。
AnimatedGifDirectoryEvent = "Rain event " + (dirs.Length + 1);