C# 如何基于日期时间获取文件(通过Directory.GetFile())

C# 如何基于日期时间获取文件(通过Directory.GetFile()),c#,C#,我在应用程序中遇到了一个问题,我想根据DateTime从文件夹中获取所有文件。是否可以通过C使用Directory.GetFile()或任何其他内置函数# 谢谢 沙申克 Linq解决方案 string startFolder = @"c:\program files\Microsoft Visual Studio 9.0\"; System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder); IEnumerable&l

我在应用程序中遇到了一个问题,我想根据DateTime从文件夹中获取所有文件。是否可以通过C使用Directory.GetFile()或任何其他内置函数#

谢谢 沙申克


Linq解决方案

string startFolder = @"c:\program files\Microsoft Visual Studio 9.0\";
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);

        IEnumerable<System.IO.FileInfo> fileQuery =
            from file in fileList
            where (file.CreationTime <= maxdate//replac eyour date here
                   && file.CreationTime >= mindate)//replac eyour date here

            orderby file.CreationTime 
            select file;
因此,要直接检查文件中的每个文件,您需要执行以下操作

string fileName = @"C:\MyPath\MyFile.txt"; 
    if (File.Exists(fileName)) 
    {
        label_CreationTime.Text = 
                 File.GetCreationTime(fileName).ToString(); 
        label_LastAccess.Text = 
                 File.GetLastAccessTime(fileName).ToString(); 
        label_LastWrite.Text = 
                 File.GetLastWriteTime(fileName).ToString(); 
    }
string[] filePaths = Directory.GetFiles(@"c:\MyDir\");
foreach(string fileName in filePaths )
{
          Console.Writeln(fileName );
          Console.Writeln(File.GetCreationTime(fileName).ToString()); 
          Console.Writeln(File.GetLastAccessTime(fileName).ToString()); 
          Console.Writeln(File.GetLastWriteTime(fileName).ToString()); 
}

在这里可以找到使用System.IO.FileSystemInfo.CreationTime的一个非常好的示例

获取文件信息并检查创建/修改日期是我可以想到的一个选项

您可以尝试

    var d = new DirectoryInfo(dirPath);
    var filesInfo d.GetFiles().OrderBy(x => x.LastAccessTime);
也可以查询日期和时间

   var filesInfo = d.GetFiles().Where(x=>x.LastAccessTime > datetTime);
您可以通过
LastWriteTime
属性使用和过滤
FileInfo
对象,例如:

var minimumDate = new DateTime(2012, 1, 1);
var directory = new DirectoryInfo(@"D:\MyFolder");
var files = directory.EnumerateFiles("*", SearchOption.AllDirectories)
            .Where(f => f.LastWriteTime >= minimumDate);

请注意,这可能引发一个
UnauthorizedAccessException

要访问昨天创建的所有文件,请在Linq中执行类似操作,设置所需的最小/最大值:

如果要查看文件修改而不是创建,请将
CreationTime
替换为
LastWriteTime

var targetDirectory = "Put your dir here";
var minDate = DateTime.Today.AddDays(-1);
var maxDate = DateTime.Today.AddSeconds(-1);

try
{
    var dir = new Directory(targetDirectory);
    foreach (var file in dir.GetFiles().Where(f => f.CreationTime >= minDate 
                                                && f.CreationTime <= maxDate))
    {
        // Do something with file.
        Console.WriteLine("File : {0}", file.FullName);
    }
}
catch( Exception e )
{
    // Handle access exceptions.
}
var targetDirectory=“将您的目录放在这里”;
var minDate=DateTime.Today.AddDays(-1);
var maxDate=DateTime.Today.AddSeconds(-1);
尝试
{
var dir=新目录(targetDirectory);
foreach(dir.GetFiles()中的var文件,其中(f=>f.CreationTime>=minDate

&&f.CreationTime“基于日期时间”是什么意思?你的意思是先得到最老的文件,还是类似的东西?是的,巴厘岛-我只想得到运行在窗口服务中的昨天的文件,这对你有用吗???是的,Parnay谢谢你的建议和回答Hii parnav..我还面临一个问题..在你所有的代码和其他代码中,我首先得到所有文件,然后得到所有文件我们根据创建时间筛选所有这些文件…我只想根据创建时间获取文件,因为我们的收件箱中每天都有超过20000个文件folder@Damboo-嘿,你可以做的一件事是创建多个线程,并为每个线程分配1000个文件,然后处理其余的代码。。。