将多个文件放到可执行文件C#

时间:2017-01-04 21:53:05

标签: c# visual-studio executable

我制作了一个可执行文件,我想在其中拖动任意数量的文件。我希望它删除所有这些文件的前15个字符。它按照希望重命名大量文件,但之后会抛出错误。

“Unhandeled Exception:System.IndexOutOfRangeException:Index超出了数组的范围。在RemoveTimeStampMultipleFiles.Program.Main(String [] args)”

当我拖动2个文件时,它是否正在寻找第三个?

还有办法允许无限文件而不是最多99吗?

main()

2 个答案:

答案 0 :(得分:3)

你的应用程序似乎正好期待99个参数,因为你的i循环从0变为98.你的错误发生了,因为在处理之后传递了许多参数,它会尝试进入下一个不存在的参数。试试这个:

using System;
using System.IO;

namespace RenameVersion2
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (var arg in args)
            {
                if (arg.Length == 0)
                    System.Environment.Exit(0);

                string MyString = Path.GetFileNameWithoutExtension(arg);
                String NewFileName = MyString.Remove(0, 15);


                string path = Path.GetDirectoryName(arg)
                   + Path.DirectorySeparatorChar
                   + MyString
                   + Path.GetExtension(arg);

                string newPath = Path.GetDirectoryName(arg)
                   + Path.DirectorySeparatorChar
                   + NewFileName
                   + Path.GetExtension(arg);


                File.Move(path, newPath);
            }


        }
    }
}

答案 1 :(得分:1)

您需要修复for-loop,以便迭代可用的索引,而不是超出范围。

for (int i = 0; i < args.Length; i++)
            {
                if (args[i].Length == 0)
                    System.Environment.Exit(0);

                string MyString = Path.GetFileNameWithoutExtension(args[i]);
                String NewFileName = MyString.Remove(0, 15);


                string path = Path.GetDirectoryName(args[i])
                   + Path.DirectorySeparatorChar
                   + MyString
                   + Path.GetExtension(args[i]);

                string newPath = Path.GetDirectoryName(args[i])
                   + Path.DirectorySeparatorChar
                   + NewFileName
                   + Path.GetExtension(args[i]);


                File.Move(path, newPath);
            }

不同之处在于

for (int i = 0; i < args.Length; i++)

VS

for (int i = 0; i < 99; i++)