2013-09-27 3 views
0

У меня есть этот вопрос,Console.ReadLine («») повторение при перезапуске

Мой босс хочет программа, вы можете ввести путь, Console.ReadLine(directory); Это не имеет значения, я получил эту часть работает. Фактически, весь код/​​программа работает так, как должно быть. Точка пути заключается в том, что программа просматривает все файлы в данном каталоге/подкаталогах для последнего времени записи. Он хочет заплатить минимальные усилия в этом. Таким образом, план состоит в том, чтобы использовать Windows для запуска этой программы каждые 24 часа. Только проблема с этой частью «минимального усилия» заключается в том, что вы должны вводить путь EVERYTIME, когда он запущен. Так что на самом деле это не происходит автоматически.

Вопрос в следующем: есть ли способ избежать этого? Например, Thread.Sleep();, и когда это делается, спящая метка справа под номером Console.ReadLine(directory);?

Так что не один раз в день, а спать 24 часа и на 1 минуту работы?

Если это любая помощь, вот код:

using System.IO; 
using System.Security.Permissions; 

namespace CheckWithinTime 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine("Which folder do you wish to scan?"); 
      string path = Console.ReadLine(); 

      //copies everything from the console to a .txt file 
      FileStream filestream = new FileStream(@"C:\Logs\Log.txt", FileMode.Create); 
       var streamwriter = new StreamWriter(filestream); 
       streamwriter.AutoFlush = true; 
       Console.SetOut(streamwriter); 
       Console.SetError(streamwriter); 

      //this is the path which you type in a the beginning of the program 
      string[] files = Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories); 
      List<string> updatedFiles = new List<string>(); 

      DateTime from = DateTime.Now.AddDays(-1); 
      DateTime to = DateTime.Now; 

      foreach (string name in files) 
      { 
       FileInfo file = new FileInfo(name); 
       string fullname = file.FullName; 

       //checks if the last writed time occured less then 24 hours ago, if it's not it will not be loggeed 
       if (file.LastWriteTime >= from && file.LastWriteTime <= to) 
       { 
        updatedFiles.Add(name); 

        Console.WriteLine(file.FullName + " ; " + "last changed at >> " + " ; " + file.LastWriteTime.ToString()); 
        //Console.WriteLine("File created at >> " + file.CreationTime.ToString()); 
        //Console.WriteLine("File last opened at >> " + file.LastAccessTime.ToString()); 
        Console.WriteLine(); 
       } 
      } 

      streamwriter.Close(); 
      filestream.Close(); 

      //The mail class basicly sends an e-mail to the server with the log file, but this is irrelevant 
      Mail(); 
     } 
    } 
} 

Раньше только простой файловой системы наблюдающий. После этого все было так, как сейчас, но без части Console.ReadLine(). И теперь он хочет дать путь.

Если кто-нибудь может сказать мне способ избежать Console.ReadLine(), но используйте его только тогда, когда вам это нужно. Буду премного благодарен!

Извините заранее за мои большие тексты.

ответ

1

Лучший способ сделать это - либо создать файл XML, либо использовать файл блокнота, а окна запустить диспетчер задач.

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

Мы делаем это на работе; программа работает в течение 4 месяцев, выполняя множество пучков, и мы больше ее не редактируем.

+0

Я полностью забыл об этом методе! Ха-ха, это супер гений. Спасибо огромное! – vascomakker

0

Файл или конфиг Xml для одного параметра. Передать его в командной строке string[] args:

string path; 
if(args.Length > 0) 
{ 
    path = args[0]; 
    Console.WriteLine("Using path: " + path); 
} 
else 
{ 
    Console.WriteLine("Which folder do you wish to scan?"); 
    path = Console.ReadLine(); 
} 

Затем с помощью планировщика задач, как уже было предложено, но пройти путь в качестве аргумента командной строки. Вы также можете запускать его с разными путями без приложения, поддерживающего несколько путей.

Task scheduler with path to check argument

Смежные вопросы