Оптимизатор не остановится после завершения поиска новых файлов, найденных FSW - PullRequest
0 голосов
/ 27 января 2020

Я создал приложение CLI, которое будет следить за каталогом и оптимизировать любые новые PDF-файлы, которые перемещаются в него. На момент последней сборки ошибок не было.

Проблема, с которой я столкнулся, заключается в том, что при запуске приложения приложение обнаруживает изменение и оптимизирует измененные файлы, но не останавливает цикл оптимизации новые файлы.

Как бы я остановился в процессе оптимизации, когда он достигнет конца новых файлов?

public class Methods
        {
            [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
            public static void Optimize()
            {
                Thread.Sleep(1000);
                PDFNet.Initialize();

                string input_Path = @"C:\Users\user\Desktop\testinpactive\";
                string output_Path = @"C:\Users\user\Desktop\output\";
                string[] files = Directory.GetFiles(input_Path, "*.pdf", SearchOption.AllDirectories);

                foreach (string file in files)
                {
                    string fileName = Path.GetFileName(file);
                    Console.WriteLine($"Optimizing {fileName}");
                    string sub = file.Substring(41, 7);
                    CreateFolder(output_Path + sub);

                    // CreateFolder(output_Path + );
                    try
                    {
                        using (PDFDoc doc = new PDFDoc(file))
                        {
                            //--------------------------------------------------------------------------------
                            // Example 1) Simple optimization of a pdf with default settings.
                            doc.InitSecurityHandler();
                            Optimizer.Optimize(doc);
                            doc.Save(output_Path + sub + fileName, SDFDoc.SaveOptions.e_linearized);
                            // File Delete Process
                            //File.Delete(input_Path + files);
                            //Console.WriteLine("File Deleted");
                            Console.WriteLine("Done..\n");
                        }
                    }
                    catch (PDFNetException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }

            public static void Run()
            {
                // Create a new FileSystemWatcher and set its properties.
                // Params: Path, and filter
                using (FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Users\user\Desktop\testinpactive", "*.pdf"))
                {
                    // To watch SubDirectories 
                    watcher.IncludeSubdirectories = true;

                    FswHandler Handler = new FswHandler();

                    // Add event handlers.
                    watcher.Created += Handler.OnCreated;

                    // Begin watching.
                    watcher.EnableRaisingEvents = true;

                    // Wait for the user to quit the program.
                    Console.WriteLine("Press 'q' to quit the sample.");
                    while (Console.Read() != 'q');
                }
            }
            public class FswHandler
            {
                public void OnCreated(Object source, FileSystemEventArgs e)
                {
                    // Write out Path (Testing)
                    Console.WriteLine($"FILE: {e.FullPath} CHANGE-TYPE: {e.ChangeType}");
                    // Specify what is done when a file is changed, created, or deleted.
                    Optimize();
                }

            }

1 Ответ

0 голосов
/ 27 января 2020

Большое спасибо @BenVoigt за объяснение того, что я делал неправильно.

Вот изменения, которые я внес в свой код для решения проблемы.

public static void Optimize(string filePath, string outputPath, string fileName, string fileNum)
            {
                PDFNet.Initialize();
                try
                {
                        using (PDFDoc doc = new PDFDoc(filePath)) 
                        {
                            //--------------------------------------------------------------------------------
                            // Example 1) Simple optimization of a pdf with default settings.
                            doc.InitSecurityHandler();
                            Optimizer.Optimize(doc);
                            Directory.CreateDirectory(outputPath + filePath.Substring(41, 7));
                            doc.Save(filePath, SDFDoc.SaveOptions.e_linearized);
                            //doc.Save(outputPath + fileNum + fileName, SDFDoc.SaveOptions.e_linearized);
                            Console.WriteLine("Done..\n");
                        }
                }
                catch (PDFNetException e)
                {
                        Console.WriteLine(e.Message);
                }
            }

            public static void Run()
            {
                // Create a new FileSystemWatcher and set its properties.
                // Params: Path, and filter
                using (FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Users\user\Desktop\testinpactive", "*.pdf"))
                {
                    // To watch SubDirectories 
                    watcher.IncludeSubdirectories = true;

                    FswHandler Handler = new FswHandler();

                    // Add event handlers.
                    watcher.Created += Handler.OnCreated;

                    // Begin watching.
                    watcher.EnableRaisingEvents = true;

                    // Wait for the user to quit the program.
                    Console.WriteLine("Press 'q' to quit the sample.");
                    while (Console.Read() != 'q');
                }
            }
            public class FswHandler
            {
                public void OnCreated(Object source, FileSystemEventArgs e)
                {
                    string output = @"C:\Users\user\Desktop\output";
                    // Write out Path (Testing)
                    Console.WriteLine($"FILE: {e.FullPath} CHANGE-TYPE: {e.ChangeType}");
                    Thread.Sleep(800);
                    // Specify what is done when a file is changed, created, or deleted.
                    Optimize(e.FullPath, output, e.Name.Substring(7), e.FullPath.Substring(40, 8));
                }

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...