【问题标题】:Program cannot open file, but the file is already there程序无法打开文件,但文件已经存在
【发布时间】:2011-01-18 05:58:15
【问题描述】:

我正在编写一个可以打开图像文件的程序,但奇怪的事情发生了。这是 cmd 的输出:

C:\Users\Karl\Pictures>testcvconsole mypic.jpg
argv[0]==testcvconsole
argv[1]==mypic.jpg
fopen is null
strerror(errno)==No such file or directory

当文件与可执行文件位于同一目录中时,当 fopen 无法打开我的文件时,我应该考虑什么?

这是在 Windows 7 上,Visual Studios Express 2010。C++。

编辑:下面的代码

#include "stdafx.h"
#include <string.h>
#include <errno.h>

int goMain(int argc, char** argv);

int _tmain(int argc, _TCHAR* argv[])
{
 goMain(argc, (char**)argv);
 return 0;
}

int goMain( int argc, char** argv ){

 if (argv[1] != NULL){
  printf("argv[0]==%S\nargv[1]==%S\n", argv[0], argv[1]);

  if (fopen(argv[1], "r") == NULL){
   printf("fopen is null\n");
   printf(strerror(errno));
  }

 }

 return 0;
}

EDIT2:

我试过了

char *workingDir =_getcwd(NULL, 0);
printf("workingDir == %S", workingDir);

按照 TomK 的建议并返回:

workingDir ==

什么都没有。嗯……

EDIT3: 我得到了一些东西。我试过了

argv[1] = "C:/Users/Karl/Pictures/mypic.jpg";

fopen 可以打开它。上面的这个语句插入到 fopen 之前。

【问题讨论】:

  • 1.我们怎么知道图片真的在那里? 2. 给我一些代码!
  • 请向我们展示您的源代码。
  • 已按要求更新。 @Billy ONeal:因为我把图片和 .exe 放在同一个目录下。

标签: c++ visual-studio-2010 file fopen


【解决方案1】:

确保绝对确定它们在同一个目录中。我这样说是因为您使用的是 Visual Studio,“相同”目录并不总是那么清晰,因为这取决于您如何通过 IDE 执行可执行文件。

C:\Users\Karl\Pictures>testcvconsole mypic.jpg

你确定mypic.jpg 位于C:\Users\Karl\Pictures 吗?

【讨论】:

  • 我自己编译.exe,复制到Pictures文件夹,不应该在同一个目录吗?
  • 是的。 mypic.jpg 也在吗?你能用其他方式打开它吗(比如,一些脚本或批处理文件)?
  • 简单测试,@unknownthreat。当您在 C:\Users\Karl\Pictures 目录中的命令提示符下时,只需输入 mypic.jpg 并按 ENTER。如果文件存在,它应该在 IE 或 Firefox 或您绑定到 JPG 文件的任何应用程序中打开。
  • @unknownthreat:作为另一个测试,您能否编写一个没有 unicode 内容的简单 main(main,而不是 _tmain),也没有 stdafx(只需创建一个空控制台项目并使用main中的代码向其中添加一个新的.c文件)
  • 啊哈,使用 main 而不是 _tmain 工作。所以unicode是问题的原因,不是吗?很公平,但是有时我需要打开没有用英文命名的文件;我需要统一码。那么在这种情况下,我应该寻找哪些东西?
【解决方案2】:
  1. 你能检查一下工作目录是否正确吗?

    #include <direct.h>
    
    char *workingDir =_getcwd(NULL, 0);
    
  2. 您可以使用管理员权限运行您的应用程序吗?

【讨论】:

    【解决方案3】:

    .exe 通常在 Debug 或 Release 子目录中创建 - 尝试提供图像的绝对路径...

    【讨论】:

      【解决方案4】:

      我遇到过这个问题,结果发现 Visual Studio 的运行时没有设置当前目录。我从来没有弄清楚这个问题:相反,我只是使用了绝对路径。如果没有绝对路径,您的程序将在 C:\ 中查找。您也可以尝试使用".\\mypic.jpg" 或GetCurrentDirectory()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-09
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多