- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有更有效的方法来从带有日期过滤器的目录中填充文件名列表?
目前,我正在这样做:
foreach (FileInfo flInfo in directory.GetFiles())
{
DateTime yesterday = DateTime.Today.AddDays(-1);
String name = flInfo.Name.Substring(3,4);
DateTime creationTime = flInfo.CreationTime;
if (creationTime.Date == yesterday.Date)
yesterdaysList.Add(name);
}
这会遍历文件夹中的每个文件,我觉得应该有更多高效的方式。
最佳答案
第一个解决方案:
您可以使用 LINQ:
List<string> yesterdaysList = directory.GetFiles().Where(x => x.CreationTime.Date == DateTime.Today.AddDays(-1))
.Select(x => x.Name)
.ToList();
那么你可以直接使用这个名字列表。
第二种解决方案:
另一种使其更快的解决方案可能是:
DateTime yesterday = DateTime.Today.AddDays(-1); //initialize this variable only one time
foreach (FileInfo flInfo in directory.GetFiles()){
if (flInfo.CreationTime.Date == yesterday.Date) //use directly flInfo.CreationTime and flInfo.Name without create another variable
yesterdaysList.Add(flInfo.Name.Substring(3,4));
}
基准:
我使用这段代码做了一个基准测试:
class Program {
static void Main( string[ ] args ) {
DirectoryInfo directory = new DirectoryInfo( @"D:\Films" );
Stopwatch timer = new Stopwatch( );
timer.Start( );
for ( int i = 0; i < 100000; i++ ) {
List<string> yesterdaysList = directory.GetFiles( ).Where( x => x.CreationTime.Date == DateTime.Today.AddDays( -1 ) )
.Select( x => x.Name )
.ToList( );
}
timer.Stop( );
TimeSpan elapsedtime = timer.Elapsed;
Console.WriteLine( string.Format( "{0:00}:{1:00}:{2:00}", elapsedtime.Minutes, elapsedtime.Seconds, elapsedtime.Milliseconds / 10 ) );
timer.Restart( );
DateTime yesterday = DateTime.Today.AddDays( -1 ); //initialize this variable only one time
for ( int i = 0; i < 100000; i++ ) {
List<string> yesterdaysList = new List<string>( );
foreach ( FileInfo flInfo in directory.GetFiles( ) ) {
if ( flInfo.CreationTime.Date == yesterday.Date ) //use directly flInfo.CreationTime and flInfo.Name without create another variable
yesterdaysList.Add( flInfo.Name.Substring( 3, 4 ) );
}
}
timer.Stop( );
elapsedtime = timer.Elapsed;
Console.WriteLine( string.Format("{0:00}:{1:00}:{2:00}", elapsedtime.Minutes, elapsedtime.Seconds, elapsedtime.Milliseconds / 10));
timer.Restart( );
for ( int i = 0; i < 100000; i++ ) {
List<string> list = new List<string>( );
foreach ( FileInfo flInfo in directory.GetFiles( ) ) {
DateTime _yesterday = DateTime.Today.AddDays( -1 );
String name = flInfo.Name.Substring( 3, 4 );
DateTime creationTime = flInfo.CreationTime;
if ( creationTime.Date == _yesterday.Date )
list.Add( name );
}
}
elapsedtime = timer.Elapsed;
Console.WriteLine( string.Format( "{0:00}:{1:00}:{2:00}", elapsedtime.Minutes, elapsedtime.Seconds, elapsedtime.Milliseconds / 10 ) );
}
}
结果:
First solution: 00:19:84
Second solution: 00:17:64
Third solution: 00:19:91 //Your solution
关于带日期过滤器的 C# GetFiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942979/
我写了一些代码来获取目录中的文件。为此,我使用了 Directory.GetFiles 方法。我以前用过它,所以我知道它存在并且有效。 所以我开始使用它(我正在使用 System.IO 命名空间),它
System.IO.Directory.GetFiles() 返回一个string[]。返回值的默认排序顺序是什么?我是按名字假设的,但如果是的话,当前的文化对其影响有多大?您可以将其更改为创建日期之
这个问题在这里已经有了答案: Exact file extension match with GetFiles()? (8 个答案) 关闭 4 年前。 我需要获取指定文件夹的所有子文件夹中的所有 .
我在一个临时文件夹中有几个文件。我可以使用以下脚本将它们加载到 Photoshop 中: var sourceFolder = Folder("C:\\temp"); if (sourceFo
我尝试在 ImageJ 插件中使用 java.awt.FileDialog,但由于某种原因,我收到一个错误,指出 Java 找不到 getFiles 方法: C:\File_Opener3.java:
我需要每天从网络驱动器复制文件。为此,我尝试了以下方法: var dir = new DirectoryInfo(@"Z:\"); var filesA300 = dir.GetFil
使用下面的代码,我能够获取名称中包含 string 的所有文件: DirectoryInfo dirInf = new DirectoryInfo(path); FileInfo[] fInfArra
是否有更有效的方法来从带有日期过滤器的目录中填充文件名列表? 目前,我正在这样做: foreach (FileInfo flInfo in directory.GetFiles()) { Da
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Can you call Directory.GetFiles() with multiple filter
我有这个基本代码 Directory.GetFiles(filepath, "*.OUT") 文件路径中有一个名为 Filename.OUT 的文件。 上面的代码可以很好地找到该文件。 现在,我通过附
我有一个包含 2 个子文件夹的文件夹,每个子文件夹包含大约 1000 个文件。这些文件如下所示: 38485303_SARA_N211_T.ygx 38485303_SARA_N211_B.ygx 3
TDirectory.GetFiles 有一个名为 SearchPattern 的参数。 Embarcadero 的文档显示 The mask used when matching file name
我正在使用 Directory.GetFiles 从特定文件夹中获取文件。默认情况下,该文件夹中的文件将按文件名排序,即。按文件名的字母顺序排列。我想按照文件修改的顺序获取文件。 我无法使用 Dire
我正在尝试实现一种将文件上传到特定本地目录的方法。 我认为: 这是在我的 Controller 操作中: def upload(){ def f
我正在实现带有输入字段和文件上传的简单表单。我浏览了教程:http://grails.org/Simple+Avatar+Uploader和文档:http://grails.org/doc/2.0.x
我在运行 System.IO.Directory.GetFiles("my_directory_name_on_network")并且对大多数 11320 来说都很好目录中的文件,但其中一个在那里两次
我在以下代码段中遇到行为差异 DirectoryInfo di = new DirectoryInfo("c:\"); FileInfo[] textFiles = di.GetFiles("log_
我有以下代码: private string[] FindExistingDocuments() { string supportedImageFormats = "jpg,pdf,doc,d
我想计算文件夹中具有特定扩展名且大小超过 X kb 的文件数。任何人都可以帮忙解决这个问题吗? 我可以做扩展部分: Directory.GetFiles("c:\\temp\\", "*.txt",
我想使用 Directory.GetFiles 从文件夹中读取文件。从msdn网站我发现:对于c,我包括: using System; using System.IO; 对于 C++,我包括: #us
我是一名优秀的程序员,十分优秀!