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