Ссылка на файл в статической библиотеке C - PullRequest
1 голос
/ 27 декабря 2011

Я создал статическую библиотеку в C, используя Visual Studio.Эта библиотека содержит функцию, которая обращается к текстовому файлу, хранящемуся в этом текущем каталоге.Библиотека была построена правильно.Но проблема в том, что когда я вызываю функцию извне другого проекта, она не загружает этот текстовый файл (я правильно связал файл .lib, все остальное работает, за исключением загрузки этого файла).

Любые идеи, какзагрузить текстовый файл из .lib файла только по относительному пути ??

Заранее спасибо ..

Ниже приведено определение функции проверки библиотеки

int test() 
{ 
   FILE *fp = fopen("hello.txt", "r"); 
   if(!fp) printf("File Error");
   return 0; 
} 

Для этого создается файл test.lib.Просто доступ к текущей папке hello.txt файла, но когда эта функция вызывается из другого проекта.это говорит об ошибке файла.

Ответы [ 3 ]

2 голосов
/ 27 декабря 2011

Измените свой код, чтобы посмотреть на errno:

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

...

    if(!fp) printf("File error: %s\n", strerror(errno));

А затем посмотрите значение ошибки в вашей операционной системе, чтобы увидеть, что происходит.

0 голосов
/ 27 декабря 2011

Проверьте путь к файлу и напечатайте ошибку, я думаю, у вас есть статический путь к файлу

0 голосов
/ 27 декабря 2011

Я уверен, что тот факт, что вы вызываете эту функцию из библиотеки, является красной сельдью .

. Скорее всего, ваш файл hello.txt не являетсяв рабочем каталоге исполняемого процесса.Идите вперед и #include <windows.h> в своем проекте, и используйте функцию GetCurrentDirectory, чтобы увидеть, каков рабочий каталог при запуске вашей программы.Скорее всего, это не тот же путь, что и у вашего текстового файла.

Чтобы исправить это, вы можете сделать одно из двух: изменить настройки запуска программы (будь то из Visual Studio или ярлык Windows).) указать рабочий каталог (называемый «Начать с:» для ярлыка Windows) в качестве пути к текстовому файлу, который вы хотите открыть, или вы можете выяснить, какой рабочий каталог использовала ваша программа, и переместить туда свой текстовый файл.вместо этого.

Редактировать: Кроме того, если вы хотите, чтобы приложение использовало собственный каталог (где фактически находится исполняемый файл), вы можете использовать функцию GetModuleFileNameчтобы получить полный путь к исполняемому файлу.Конечно, вам придется обрезать имя файла программы до конца строки, которую она создает, но это должно быть просто.

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