Console.WriteLine为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Console.WriteLine为空相关的知识,希望对你有一定的参考价值。

我有一个奇怪的问题。我写了一个在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;
        }
    }
}
答案

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

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

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

以上是关于Console.WriteLine为空的主要内容,如果未能解决你的问题,请参考以下文章

VS中添加自定义代码片段——偷懒小技巧

表达式目录树Expression

C#程序员经常用到的10个实用代码片段 - 操作系统

Debug.WriteLine() 与 Console.WriteLine() 处理文化的方式不同。为啥?

Console.Writeline 对性能的影响

Console.WriteLine 为十六进制