public static void stop()
            {
                if (isRunning)
                {
                    isRunning = false;

                    StandardStreamRedirector.close(StandardStreamRedirector.StreamFileDescriptor.Output);
                    onRedirectionStoped();
                }
            }
            public static void monitoring()
            {
                string buffer = string.Empty;

                while (isRunning)
                {
                    buffer = StandardStreamRedirector.getBuffer(StandardStreamRedirector.StreamFileDescriptor.Output);

                    if (buffer.Length > 0)
                        onRedirectionPerformed(buffer);
                }
            }
            public static void start()
            {
                if (!isRunning)
                {
                    isRunning = true;

                    StandardStreamRedirector.open(StandardStreamRedirector.StreamFileDescriptor.Output, null);
                    onRedirectionStarted();

                    monitoringThread = new Thread(new ThreadStart(monitoring));
                    monitoringThread.Start();
                }
            }
        public void Dispose()
        {
            StandardStreamRedirector.close(StandardStreamRedirector.StreamFileDescriptor.Error);

            if (!errorLogScanned)
            {
                scanErrorLog();
            }

            if (!hasError)
            {
                File.Delete(tempLogFilePath);
            }
            else
            {
                zipLogFiles();
            }
        }
        public FileManager(ActionListener actionListener = null)
        {
            this.actionListener = actionListener;

            if (!Directory.Exists(inputPath))
            {
                Directory.CreateDirectory(inputPath);
            }

            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }

            if (!Directory.Exists(tempProgressPath))
            {
                Directory.CreateDirectory(tempProgressPath);
            }

            StandardStreamRedirector.open(StandardStreamRedirector.StreamFileDescriptor.Error, tempLogFilePath);
        }
 public static void writeStandardOutput(string message)
 {
     StandardStreamRedirector.writeStandardStream(StandardStreamRedirector.StreamFileDescriptor.Output, message);
 }
 public static void dispose()
 {
     stop();
     StandardStreamRedirector.close(StandardStreamRedirector.StreamFileDescriptor.Output);
 }
        public void scanErrorLog()
        {
            onLogFileScanningStarted();
            hasError = false;

            try
            {
                string[] prefixes = new string[]
                {
                    "Saving file",
                    "File",
                    "Dimension",
                    "Output",
                    "Lossless",
                    "* Header",
                    "* Lossless",
                    "* Precision",
                    "* Palette size",
                    "PREDICTION",
                    "CROSS-COLOR-TRANSFORM",
                    "SUBTRACT-GREEN",
                    "PALETTE",
                    "Saved file",
                    "bytes used",
                    "line count",
                    "mode-partition",
                    "Residuals bytes",
                    "macroblocks",
                    "quantizer",
                    "filter level",
                    "block count",
                    "intra",
                    "skipped block",
                    "|"
                };

                StringReader reader = new StringReader(StandardStreamRedirector.getBuffer(StandardStreamRedirector.StreamFileDescriptor.Error));
                string       line;

                while ((line = reader.ReadLine()) != null)
                {
                    bool err = true;

                    if (line.Trim().Length > 0)
                    {
                        foreach (string prefix in prefixes)
                        {
                            if (line.Trim().StartsWith(prefix))
                            {
                                err = false;
                                break;
                            }
                        }

                        if (err)
                        {
                            hasError = true;
                            break;
                        }
                    }
                }
                reader.Close();
            }
            catch (Exception e)
            {
                Console.Error.WriteLine(e.ToString());
                hasError = true;
            }
            finally
            {
                errorLogScanned = true;
                onLogFileScanningPerformed(hasError);
            }
        }