【问题标题】:File-handling example problems文件处理示例问题
【发布时间】:2014-05-28 14:19:22
【问题描述】:

这可能是我忽略的东西,但在运行我的程序后,我不断返回:

“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);
    }
}

这是我在命令行中的输入:

csc.exe ex47_1.exe [回车]
ex47_1.exe listit ex47_1.cs [Enter]

有什么建议吗?我对 C# 还很陌生。

Edt:在过去的 4 年里,我一直在自学编程,这是我第一次使用 Sam 的自学书。我没有意识到所有示例中有多少错误。感谢您的帮助,但这教会了我不要完全依赖来源来确保一切正确。

【问题讨论】:

  • 呃……你指定的文件在当前目录下找不到怎么办?
  • catch(System.IO.FileNotFoundException)更改为catch(System.IO.FileNotFoundException e)并告诉我们e的值,而不是您的自定义错误消息
  • 使用调试器,卢克!
  • @user3101180 所以对你来说,使用 IDE 而是在 Stack Overflow 上发布问题会更快?
  • @UweKeim 有道理。通过一些打印语句,您可以解决这个问题。看起来好像您正试图打开args[0],据我所知,args[0]listit。我想你想打开args[1]

标签: c# file-io command-line filestream streamreader


【解决方案1】:

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

I.E.

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

Args[0] == "myProgram.exe" Args[1] == "myArgFile.txt"

您是要查看 Args[1] 而不是 Args[0]?

更新:上面所说的不适用于 C#,但是在这种情况下,您的代码正在尝试查找文件“listit”,即您的 Args[0]。我相信你想要的是你的“ex47_1.cs”文件,它是 Args[1]。所以改变:

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

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

【讨论】:

  • @user3101180,这是正确的答案,但原因是错误的。盲人,也许您应该更新您的答案以反映args[0]listitargs[1] 是OP 想要的路径。
【解决方案2】:

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

Soooo...您没有指定路径名的事实使我认为您想使用当前 exe 文件所在目录中的文件,因此您可以使用它:

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

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2023-01-09
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多