2011-12-27 5 views
1

Visual Studio를 사용하여 C에서 정적 라이브러리를 만들었습니다. 이 라이브러리에는 현재 디렉토리에 저장된 텍스트 파일에 액세스하는 기능이 있습니다. 라이브러리가 제대로 구축되었습니다. 하지만 문제는 다른 프로젝트 외부에서 함수를 호출 할 때 해당 텍스트 파일을로드하지 않는다는 것입니다. (.lib 파일을 적절히 링크 했으므로 다른 모든 파일은 해당 파일을로드하는 것 외에는 작동합니다.)C 정적 라이브러리의 파일 참조

.lib 파일에서 텍스트 파일을 상대 경로로로드하는 방법에 대한 아이디어가 있으십니까 ?? 다음 사전에

감사합니다 ..

는 test.lib 파일이 작성되었으며 생성 된 라이브러리 테스트 함수 정의

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

입니다. 현재 폴더 hello.txt 파일에만 액세스하지만이 기능이 다른 프로젝트에서 호출 된 경우. 파일 오류입니다.

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

... 

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

을 그리고 무슨 일이 일어나고 있는지 확인하려면 운영 체제에서의 errno의 의미를 찾아 :

+1

코드의 실제 모양은 무엇입니까? – bobbymcr

+0

은 해당 텍스트 파일을 열어주는 taht 함수의 코드와 그 라이브러리를 사용하는 응용 프로그램을 보여줍니다. –

+0

lib 코드 또는 다른 코드에서 파일을로드하는지에 관계없이 어떤 차이도 없어야합니다. 그러나 현재 디렉토리가 실제로 무엇인지 알고 있는지 확인하십시오! – codeling

답변

2

errno보고하도록 코드를 수정합니다.

+0

을 말하고 있습니다. 감사합니다. Mat, 당연히 내 대답을 편집했습니다. –

+1

'strerror (errno)'를 원하셨습니까? 대신에'perror'를'if (! fp) {perror ("fopen");/* Handle error * /}' –

+0

duh ... 고정 (초기에 arg를 보지 못했고 C를 ​​사용 했으므로 오랜 시간이 걸렸습니다). –

0

라이브러리에서이 함수를 호출한다는 사실은 red herring입니다.

가장 많이 발생하는 일은 hello.txt 파일이 실행중인 프로세스의 working directory에없는 것입니다. 프로젝트에서 #include <windows.h>을 계속 진행하고 GetCurrentDirectory 함수를 사용하여 프로그램을 실행할 때 작업 디렉토리가 무엇인지 확인하십시오. 대부분 텍스트 파일과 경로가 다릅니다.

이 문제를 해결하려면 다음 두 가지 중 하나를 수행 할 수 있습니다. Visual Studio 또는 Windows 바로 가기에 관계없이 프로그램의 시작 설정을 변경하여 작업 디렉토리 ("시작 위치" Windows 단축키)를 열려고하는 텍스트 파일의 경로로 지정하거나 프로그램에서 사용중인 작업 디렉토리를 찾아 텍스트 파일을 대신 이동할 수 있습니다.

편집 : 또한, 당신은 (실행 파일이 실제로 상주) 응용 프로그램이 실행 파일의 전체 경로를 얻을 수있는 GetModuleFileName 기능을 사용할 수 있습니다 자신의 디렉토리를 사용하려는 경우. 물론 제작하는 문자열의 끝 부분에서 프로그램의 파일 이름을 다듬어야하지만 케이크 조각이어야합니다.

-2

파일 경로를 확인하고 오류 번호를 인쇄하십시오. 정적 파일 경로가 있다고 생각합니다.

+0

-1. 이것은 기술적으로는 정확하지만 무시 무시하고 간결합니다. –

관련 문제