C# 文件处理示例问题

C# 文件处理示例问题,c#,file-io,command-line,filestream,streamreader,C#,File Io,Command Line,Filestream,Streamreader,这可能是我忽略的,但在运行我的程序后,我继续返回: “ListIT找不到该文件” 这是我的密码: public static void Main(string[] args) { try { int ctr = 0; if (args.Length <= 0) { Console.WriteLine("Format: ListIT filename"); return;

这可能是我忽略的,但在运行我的程序后,我继续返回:

“ListIT找不到该文件”

这是我的密码:

public static void Main(string[] args)
{
    try {
        int ctr = 0;
        if (args.Length <= 0)
        {
            Console.WriteLine("Format: ListIT filename");
            return;
        }
        else
        {
            FileStream f = new FileStream(args[0], FileMode.Open);
            try
            {
                StreamReader t = new StreamReader(f);
                string line;
                while((line = t.ReadLine()) != null)
                {
                    ctr++;
                    Console.WriteLine("{0}: {1}", ctr, line);
                }
                f.Close();
            }
            finally { f.Close(); }
        }
    }
    catch(System.IO.FileNotFoundException)
    {
        Console.WriteLine ("ListIT could not find the file ", args[0]);
    }
    catch (Exception e)
    {
        Console.WriteLine("Exception: {0}\n\n", e);
    }
}
publicstaticvoidmain(字符串[]args)
{
试一试{
int ctr=0;

if(args.Length尝试在不指定路径的情况下打开文件总是一件棘手的事情。如果不进行明确检查,尤其是在从Visual Studio运行应用程序或使用快捷方式时,您永远不知道当前工作目录是否真的是您认为的那样

Soooo…您没有指定路径名这一事实让我认为您希望使用当前exe文件所在的directoy中的文件,因此您可以使用:

string myPathName = Path.GetDirectory(Assembly.GetEntryAssembly().Location);
string realFileName = Path.Combine(myPathName, args[0]);

我不确定如何从命令行运行C++程序,但是,如果在C++中正确地从命令行启动程序时,第一个参数是程序的名称。 即

(命令行输入) myProgram.exe myArgFile.txt

Args[0]=“myProgram.exe” Args[1]=“myArgFile.txt”

是否要查看Args[1]而不是Args[0]

更新:上述内容不适用于C#,但是在本例中,您的代码试图查找文件“listit”,它是您的参数[0]。我相信您需要的是“ex47_1.cs”文件,它是参数[1]。因此,请更改:

FileStream f = new FileStream(args[0], FileMode.Open);


嗯……在当前目录中找不到您指定的文件如何?请将
catch(System.IO.FileNotFoundException)
更改为
catch(System.IO.FileNotFoundException e),而不是自定义错误消息
并告诉我们
e
的值使用调试器,Luke!@user3101180,那么对于您来说,不使用IDE而发布堆栈溢出问题会更快?@UweKeim有一点道理。通过一些print语句,您可以解决这个问题。看起来您似乎正在尝试打开
args[0]
,就我所知,
args[0]
listit
。我想你应该打开
args[1]
@user3101180,这是正确的答案,但原因是错误的。盲人,也许你应该更新你的答案,以反映
args[0]
listit
,而
args[1]
是OP想要的路径。
FileStream f = new FileStream(args[1], FileMode.Open);