在奇怪的情况下在位图声明上抛出异常

时间:2016-07-30 03:26:17

标签: vb.net winforms

我遇到了这个问题,并且通过很多挫折将它隔离开来。 当我从另一个文件夹中拖动我的exe文件时,与命令行参数无关的位图声明会引发异常" System.ArgumentException:参数无效"。

以下情况不会发生:

  1. 文件是从与exe
  2. 相同的文件夹中拖出的
  3. 文件在exe
  4. 的快捷方式上拖动

    以下是产生此错误的最小代码:

    int num = 0;
    do {
        if (num<0){
            System.out.println("You printed out a negative number");
        }
        System.out.println("Enter a natural number ");
        int num=type.nextInt();
    } while (num<0);
    

1 个答案:

答案 0 :(得分:0)

如果只提供文件名,则假定该文件位于当前目录中。当前目录在启动时并不总是相同,并且在应用程序运行时也可以更改。

我猜测该文件与EXE位于同一个文件夹中。在这种情况下,当代码工作时,当前目录必须是应用程序文件夹,如果失败,当前目录必须是其他文件夹。

我们经常在使用Process.Start游戏时看到类似的问题。许多游戏都按照您的要求进行操作,并假设当前目录是应用程序文件夹。如果您从命令行等运行游戏,那么它将是。如果您使用Process.Start从代码运行游戏,新进程将实际继承应用程序的当前目录,并且这类代码将失败。

解决方案是始终明确文件的路径。如果要打开应用程序文件夹中的文件,请准确指定:

Dim logo As New Bitmap(IO.Path.Combine(Application.StartupPath, "logo.png"))

该代码并不依赖于当前目录作为特定文件夹,因此如果不是,则不会受到影响。