Программа не может открыть файл, но файл уже существует - PullRequest
1 голос
/ 18 января 2011

Я пишу программу, которая откроет файл изображения, но произошла странная вещь. Это вывод из 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);

как предложил ТомК и вернул:

workingDir ==

Ничего. Хм ... * * 1023

EDIT3 : Я что-то получаю. Я пытался

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

И Фопен может открыть его. Это утверждение выше вставляется прямо перед открытием.

Ответы [ 4 ]

1 голос
/ 18 января 2011

Убедитесь, что уверены, , что они находятся в одном каталоге.Я говорю это потому, что вы используете Visual Studio, для которой «один и тот же» каталог не всегда так понятен, потому что это зависит от того, как вы выполняете исполняемый файл через IDE.

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

Вы уверены, что mypic.jpg находится в C:\Users\Karl\Pictures?

1 голос
/ 18 января 2011
  1. Можете ли вы проверить правильность рабочего каталога?

    #include <direct.h>
    
    char *workingDir =_getcwd(NULL, 0);
    
  2. Можете ли вы запустить свое приложение с правами администратора?

0 голосов
/ 18 января 2011

У меня была эта проблема, и оказалось, что среда выполнения Visual Studio не устанавливает текущий каталог. Я никогда не понимал проблему: вместо этого я просто использовал абсолютный путь. Без абсолютного пути ваша программа смотрит в C:\. Вы также можете попробовать использовать ".\\mypic.jpg" или GetCurrentDirectory().

0 голосов
/ 18 января 2011

Обычно .exe создается в подкаталоге Debug или Release - попробуйте указать абсолютный путь к образу ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...