无法将命令行参数与字符串组合?

时间:2013-11-26 22:47:10

标签: c#

我正在尝试从控制台行写入指定区域中的文件。 (喜欢C :) 当我发布并运行其.exe时,应用程序崩溃 我的代码是:

    using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {

            string arg1 = null;
            if (args.Length > 0)
                arg1 = args[0];
            Console.WriteLine(arg1);
            Console.WriteLine(args);
            string tf = "\tf1.txt";
            string tf1 = arg1 + tf;
            Console.WriteLine(tf1);


System.Console.Title = "Data Adder (For the test)";
Random rnd = new Random();
int r1 = rnd.Next(0, 20);
byte[] bytes = new byte[255*r1];

var TF1 = new BinaryWriter(File.Open(@arg1+"tf1.txt",FileMode.Open));
TF1.Write(bytes);
TF1.Close();
Console.ReadKey();


        }

        private static int Random(int p1, int p2)
        {
            throw new NotImplementedException();
        }
    }
}
谁知道什么是错的? (它在C#中)

3 个答案:

答案 0 :(得分:1)

生成文件路径时要小心。使用Path.Combine而不是字符串连接。

答案 1 :(得分:0)

如果您只是从命令行传递C:,则需要切换此行

var TF1 = new BinaryWriter(File.Open(@arg1+"tf1.txt",FileMode.Open));

var TF1 = new BinaryWriter(File.Open(arg1+@"\tf1.txt",FileMode.Open));

或路径无效C:tf1.txt

此外,您应该在打开文件之前检查文件是否存在:

if (File.Exists(arg1 + @"\tf1.txt"))
{
    var TF1 = new BinaryWriter(File.Open(arg1 + @"\tf1.txt", FileMode.Open));
    TF1.Write(bytes);
    TF1.Close();
}

您的完整代码是(只需极少的更改):

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)
        {

            string arg1 = null;
            if (args.Length > 0)
                arg1 = args[0];
            Console.WriteLine(arg1);
            Console.WriteLine(args);
            string tf = "\tf1.txt";
            string tf1 = arg1 + tf;
            Console.WriteLine(tf1);


            System.Console.Title = "Data Adder (For the test)";
            Random rnd = new Random();
            int r1 = rnd.Next(0, 20);
            byte[] bytes = new byte[255 * r1];
            for (int i = 0; i < bytes.Length; i++)
                bytes[i] = 65;

            string filepath = Path.Combine(arg1, @"\tf1.txt");
            if (File.Exists(filepath))
            {
                var TF1 = new BinaryWriter(File.Open(filepath, FileMode.Open));
                TF1.Write(bytes);
                TF1.Close();
            }
            Console.ReadKey();


        }

        private static int Random(int p1, int p2)
        {
            throw new NotImplementedException();
        }
    }
}

答案 2 :(得分:0)

我可以看到你在这里使用反斜杠......

string tf = "\tf1.txt";

但不在这里......

var TF1 = new BinaryWriter(File.Open(@arg1+"tf1.txt",FileMode.Open));

值得您逐步完成代码并查看值是什么。