Console.WriteLine为空

时间:2017-12-18 23:57:18

标签: c# .net console

我有一个奇怪的问题。我编写了一个运行在Windows Server 2008 R2上的.net 2.0控制台应用程序,它处理通过args传入的文件。当我手动运行并传入文件时,我没有得到输出。没有。没有错误或任何类型的例外。事件日志很清楚。我希望我从exe获得一些输出。我的Console.WriteLine声明中也有catch。但同样,没有任何输出。有什么想法吗?

    using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.IO;

namespace RTDXCentralFileTransmit
{
    class Program
    {
        static void Main(string[] args)
        {

            try
            {
                if (args.Length < 1)
                {
                    Console.WriteLine("File name is required");
                    logit("File name is required");
                    return;
                }
                string filename = args[0];

                Console.WriteLine("Now doing " + filename);
                logit("Now doing " + filename);

                if (!File.Exists(filename))
                {
                    Console.WriteLine("File " + filename + " does not exists.  Exiting.");
                    logit("File " + filename + " does not exists.  Exiting.");
                    File.WriteAllText("Error.txt", "File " + filename + " does not exists.  Exiting.");
                    return;
                }

                string fileplain = File.ReadAllText(filename);
                string file64 = EncodeTo64(fileplain);

                if (string.IsNullOrEmpty(file64))
                {
                    Console.WriteLine("File " + filename + " is empty.  Exiting");
                    logit("File " + filename + " is empty.  Exiting");
                    File.WriteAllText("Error.txt", "File " + filename + " is empty.  Exiting");
                    return;
                }

                FileInfo fi = new FileInfo(filename);

                com.xxxxxxxxxxxxxxxxxx.api.Dispatch dis = new com.xxxxxxxxxxxxxxxx.api.Dispatch();
                com.xxxxxxxxxxxx.api.FunnelResult fr = dis.Funnel(file64, fi.Name);

                if (fr.Success)
                {
                    Console.WriteLine("Success! " + fr.Result);
                    logit("Success!  Response from the server: " + fr.Result);
                    File.WriteAllText("Success.txt", fr.Result);
                    return;
                } else
                {
                    Console.WriteLine("Failed!! " + fr.Result);
                    logit("Failed!! " + fr.Result);
                    File.WriteAllText("Error.txt", "Transmission Failed! " + fr.Result);
                }
                logit("Exiting for " + filename);
                Environment.Exit(0);

            } catch (Exception e)
            {
                Console.WriteLine("Error. " + e.ToString());
                return;
            }

        }

        static void logit (string s)
        {
            File.AppendAllText("FileTransmit.log",DateTime.Now.ToString() + ":" + s + Environment.NewLine);
        }

        static public string EncodeTo64(string toEncode)
        {
            byte[] toEncodeAsBytes
                  = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
            string returnValue
                  = System.Convert.ToBase64String(toEncodeAsBytes);
            return returnValue;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了。问题出在主席和电脑之间。

我克隆的项目,即使它有大量的Console.WriteLine,它实际上是构建为Windows Application.这也解释了为什么我们没有Console.WriteLine.的输出

由于它正在构建为windows application,因此控制台不会等待程序完成。它立即返回 - 这让我完全不再看到许多console.writelines。但是,程序仍在运行,并且对于大文件,将其发布到远程服务器需要一段时间。等待一两分钟后,所有10 MB文件都成功传输,如日志中所示。