文件处理示例问题

时间:2014-05-28 14:19:23

标签: 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;
        }
        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 [Enter]
  ex47_1.exe listit ex47_1.cs [Enter]

有什么建议吗?我对C#很新。

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

2 个答案:

答案 0 :(得分:2)

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

(命令行输入) 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);

答案 1 :(得分:1)

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

Soooo ...你没有指定路径名这一事实让我觉得你想要使用当前exe文件所在的directoy文件,所以你可以使用这个:

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