C# сканирование папки и открытие файлов, созданных через определенное время

Я пишу небольшую программу на C#, которая сканирует папку и открывает файлы, созданные после 5.30 вечера после нажатия кнопки в программе. Это также придется искать в подпапках.

Мне нужно несколько решений, чтобы указать мне в правильном направлении, поскольку я не уверен, как я это сделаю.

Это часть программы Folder watcher. Проблема в том, когда пользователь идет домой, компьютер выключается, и создаются файлы в каталог после 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_USERSOFTWARECOMPANYFOLDERWATCHER", "FOLDERPATH", textBox1.Text);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        String WatchFolder = Registry.GetValue("HKEY_CURRENT_USERSOFTWARECOMPANYFOLDERWATCHER", "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.

4 ответов


посмотрите на Система.ИО пространство имен, в нем есть все, что вам нужно.

на Directoryinfoкласс и классы будут делать то, что вы хотите.


вот рекурсивный метод, который вы ищете:

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;
}

надеюсь, что помогла.


можно использовать FileSystemWatcher (документация MSDN) для обнаружения файлов, которые были созданы после нажатия кнопки (во время работы приложения).

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "C:\YourDirectory";
watcher.Created += (sender, args) => {
    // File was created
}
watcher.EnableRaisingEvents = true;

Это позволяет отслеживать файлы по мере их создания (во время работы приложения).

если вы просто хотите получить список всех каталогов, которые были созданы в заданном диапазоне времени (до запуска приложения), то вы можете выполнить поиск в дереве каталогов с помощью Directory.GetDirectories и Directory.GetFiles.


вместо datetime поместите значение даты и времени.

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);
    }
}