Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#扫描文件夹并打开在特定时间后创建的文件_C#_File - Fatal编程技术网

C#扫描文件夹并打开在特定时间后创建的文件

C#扫描文件夹并打开在特定时间后创建的文件,c#,file,C#,File,我正在用C语言编写一个小程序,在按下程序上的按钮后,扫描文件夹并打开下午5:30后创建的文件。这还必须在子文件夹中搜索 我需要一些解决方案来为我指明正确的方向,因为我不确定我将如何做到这一点 这是文件夹监视程序的一部分。问题是,当用户回家时,电脑会关闭,17.30之后会有文件被创建到目录中。所以我需要一种方法,当程序在早上重新启动时,它会检测到17.30之后创建的任何东西并打开它们 private void button1_Click(object sender, EventArgs e

我正在用C语言编写一个小程序,在按下程序上的按钮后,扫描文件夹并打开下午5:30后创建的文件。这还必须在子文件夹中搜索

我需要一些解决方案来为我指明正确的方向,因为我不确定我将如何做到这一点

这是文件夹监视程序的一部分。问题是,当用户回家时,电脑会关闭,17.30之后会有文件被创建到目录中。所以我需要一种方法,当程序在早上重新启动时,它会检测到17.30之后创建的任何东西并打开它们

    private void button1_Click(object sender, EventArgs e)
    {
        folderBrowser.ShowDialog();

        textBox1.Text = folderBrowser.SelectedPath;
        filewatcher.Path = textBox1.Text;
        Registry.SetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", textBox1.Text);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        String WatchFolder = Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\COMPANY\\FOLDERWATCHER", "FOLDERPATH", "").ToString();

        textBox1.Text = WatchFolder;
        filewatcher.Path = WatchFolder;
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = true;
            Hide();
        }
    }

    private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
    {
        if(!e.FullPath.EndsWith("temp.temp"))
        {
            MessageBox.Show("You have a Collection Form: " + e.Name);
            Process.Start("explorer.exe", e.FullPath);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        Show();
    }
}

这是我上面的完整代码。我想使用按钮打开或显示17.30之后创建的文件。

您可以使用
FileSystemWatcher
()来检测按下按钮后(应用程序运行时)创建的文件

这允许您在创建文件时(在应用程序运行时)跟踪文件


如果您只想获取在指定时间范围内(在应用程序启动之前)创建的所有目录的列表,那么您可以使用
directory.GetDirectories
directory.GetFiles

搜索目录树。查看System.IO命名空间,它包含您需要的所有内容


DirectoryInfo文件类将执行您想要的操作。

代替日期时间放置日期和时间值

void DirSearch(string dir) 
{
    try 
    {
        foreach (string d in Directory.GetDirectories(dir)) 
        {
            foreach (string f in Directory.GetFiles(d, "*.*")) 
            {
                if(DateTime.Compare(f.GetCreationTime, datetime))
                {
                    //files found            
                }
            }
            DirSearch(d);
        }
    }
    catch (System.Exception excpt) 
    {
        Console.WriteLine(excpt.Message);
    }
}

以下是您正在寻找的递归方法:

public static List<string> GetFilesCreatedAfter(string directoryName, DateTime dt)
{
    var directory = new DirectoryInfo(directoryName);
    if (!directory.Exists)
        throw new InvalidOperationException("Directory does not exist : " + directoryName);
    var files = new List<string>();
    files.AddRange(directory.GetFiles().Where(n => n.CreationTime > dt).Select(n=>n.FullName));
    foreach (var subDirectory in Directory.GetDirectories(directoryName))
    {
        files.AddRange(GetFilesCreatedAfter(subDirectory,dt));
    }
    return files;
}
public静态列表GetFilesCreatedAfter(字符串directoryName,DateTime dt)
{
var directory=newdirectoryinfo(directoryName);
如果(!directory.Exists)
抛出新的InvalidOperationException(“目录不存在:“+directoryName”);
var files=新列表();
files.AddRange(directory.GetFiles().Where(n=>n.CreationTime>dt)。选择(n=>n.FullName));
foreach(Directory.GetDirectories中的var子目录(directoryName))
{
AddRange(GetFilesCreatedAfter(子目录,dt));
}
归还文件;
}

希望我能帮上忙。

FileInfo/Directory.CreationTime更准确地说:还有@PoweRoy:我不想让他觉得太容易;)所以,这几乎是一个为你做家庭作业的地方。至少,当我浏览其中一些问题(有个位数代表的人)时,我有这样的感觉。来到这里,页面在不到一秒钟内加载,然后单击MSDN链接,等待加载,我想我会回到这里,希望完整的答案被发布。哦,看起来MSDN页面已经加载了。我得走了。这是获取实时更改的正确方法,但他的问题听起来像是他需要在历史上与实时进行对比。嗨,目录。GetDirectory和Directory.GetFiles似乎就是我要找的。感谢您提供的信息,我如何使用按钮编写此内容。在按钮的Click事件的事件处理程序中,使用所需的directoryPath和DateTime调用此方法。i、 e.
var files=GetFilesCreatedAfter(folderBrowser.SelectedPath,新日期时间(2011,06,24,17,30,0))
public static List<string> GetFilesCreatedAfter(string directoryName, DateTime dt)
{
    var directory = new DirectoryInfo(directoryName);
    if (!directory.Exists)
        throw new InvalidOperationException("Directory does not exist : " + directoryName);
    var files = new List<string>();
    files.AddRange(directory.GetFiles().Where(n => n.CreationTime > dt).Select(n=>n.FullName));
    foreach (var subDirectory in Directory.GetDirectories(directoryName))
    {
        files.AddRange(GetFilesCreatedAfter(subDirectory,dt));
    }
    return files;
}