【发布时间】:2017-12-18 23:57:18
【问题描述】:
我有一个奇怪的问题。我编写了一个在Windows Server 2008 R2 上运行的.net 2.0 控制台应用程序,它处理通过args 传入的文件当我手动运行它并传入一个文件时,我没有得到输出。没有。没有任何错误或异常。事件日志清晰。我希望我能从 exe 中得到一些输出。我的catch 声明中还有一个Console.WriteLine。但同样,没有任何输出。任何想法为什么?
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;
}
}
}
【问题讨论】:
-
我看到了一个
try- 这里是否有一个catch正在吞噬一个异常?logit是什么? -
发布一个显示行为的最小、完整、可验证的示例。或者,更好的是,在调试器中单步执行程序。这应该很快就会发现错误。
-
@MarcGravell 我不得不说传入的一些文件在大小方面很大。但不确定这与 Console.WriteLine 不打印任何内容有什么关系。注册表(或某处)中是否有某些东西会限制 .net 可以处理的文件的大小?输入文件是一个纯文本文件,我在将其发布到远程服务器之前将其转换为 Base64。但这没关系...通过 Console.WriteLine。
-
@JimMischel 在我单步调试时在调试器中工作。当我在控制台窗口中手动运行它时,它在 /debug 目录中不起作用。
-
@Zuzlx 在 .net 中允许的最大字节 [] 或字符串略低于 2 GiB;您可以处理比这更大的文件,但如果您尝试一次读取它们,则不能。但是由于您没有显示任何 file read 代码...