0

我有这个问题,

我的老板想要一个可以输入路径的程序,Console.ReadLine(directory); 这无关紧要,我让这部分工作。事实上,整个代码/程序都在正常工作。路径的要点是程序扫描给定目录/子目录中的所有文件以获取最后一次写入时间。他想在这方面付出最小的努力。所以计划是每24小时使用Windows启动这个程序一次。这个“最小努力”部分的唯一问题是您必须在每次启动时输入路径。所以它实际上不会自动运行。

问题是:有没有办法避免这种情况?例如,当它完成睡眠时,转到?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(),但仅在需要时使用调用它。我会很感激!

提前为我的大文本道歉。

4

2 回答 2

1

最好的方法是创建 XML 文件或使用记事本文件并让 Windows 运行任务管理器。

您可以设置一个程序在 Windows 任务管理器中经常运行,您需要做的就是保存文件的路径并让您的 C# 控制台应用程序读取该文件并获取路径,该路径将始终存储并且程序将一直运行。

我们在工作中这样做;一个程序已经通过一堆路径运行了 4 个月,我们不再对其进行编辑。

于 2013-09-27T09:54:11.673 回答
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();
}

然后按照已经建议的方式使用任务调度程序,但将路径作为命令行参数传递。然后,您也可以使用不同的路径启动它,而您的应用程序不支持多个路径。

带有检查参数路径的任务调度程序

于 2013-09-27T09:59:37.640 回答