问题:
现在本地硬盘有个数据库,会定时存入一些xls文件,文件名按存入的系统时间命名,比如11:50存的文件:201005101150.xls这样子。比如说,现在文件夹里有3个文件:一个20分钟的,一个36分钟的,一个45分钟的,然后我输入一个查找条件:26分,哪么我要找的就是36分钟的文件,当然如果有26分的文件,那找的就是26分钟的文件。也就是说要查找到跟它最接近而且必须在它后面时间存入的文件。我想知道索引文件有没有这样的方法,找到目录下最接近且在它后面的一个文件。
现在本地硬盘有个数据库,会定时存入一些xls文件,文件名按存入的系统时间命名,比如11:50存的文件:201005101150.xls这样子。比如说,现在文件夹里有3个文件:一个20分钟的,一个36分钟的,一个45分钟的,然后我输入一个查找条件:26分,哪么我要找的就是36分钟的文件,当然如果有26分的文件,那找的就是26分钟的文件。也就是说要查找到跟它最接近而且必须在它后面时间存入的文件。我想知道索引文件有没有这样的方法,找到目录下最接近且在它后面的一个文件。
下面这个是我写的函数,文件夹名是XX_20081011_111000 这种格式
/// <summary>
/// 得到指定路径下与指定时间最相近并比指定时间大的目录
/// </summary>
/// <param name="filePath">指定的路径</param>
/// <param name="dTime">指定的时间</param>
/// <returns>指定路径下与当前时间最相近并比指定时间大的目录</returns>
private string GetNextFilePath(string filePath, DateTime dTime)
{
if (!Directory.Exists(filePath))
{
return string.Empty;
} string[] strDirectoryArr = Directory.GetDirectories(filePath);
if (strDirectoryArr.Length == 0)
{
return string.Empty;
}
//最新路径
string newestFilePath = "";
//临时保存时间
DateTime tmpDateTime = DateTime.MinValue;
//临时的比较时间
DateTime cmpDateTime = DateTime.MinValue;
string[] strArr = null; bool isFirst = true;
foreach (string directory in strDirectoryArr)
{
strArr = directory.Substring(directory.LastIndexOf('\\')).Split('_');
if (strArr.Length != 3)
{
continue;
}
cmpDateTime = new DateTime(Convert.ToInt32(strArr[1].Substring(0, 4)), Convert.ToInt32(strArr[1].Substring(4, 2)), Convert.ToInt32(strArr[1].Substring(6, 2)),
Convert.ToInt32(strArr[2].Substring(0, 2)), Convert.ToInt32(strArr[2].Substring(2, 2)), Convert.ToInt32(strArr[2].Substring(4, 2))); //如果指定时间大于比较时间,则Continue
if (dTime.CompareTo(cmpDateTime) > 0)
{
continue;
} if (isFirst)
{
isFirst = false;
tmpDateTime = cmpDateTime;
newestFilePath = directory;
}
//如果临时保存的时间比当前文件的时间大,则给最新路径和临时时间重新赋值
else if (tmpDateTime.CompareTo(cmpDateTime) > 0)
{
newestFilePath = directory;
tmpDateTime = cmpDateTime;
}
//给文件目录的时间部分重新赋值
this.m_FileTime = tmpDateTime;
}
return newestFilePath;
}