2011-12-27 88 views
1

我使用Visual Studio在C中创建了一个静态库。该库包含一个访问存储在当前目录中的文本文件的函数。图书馆建造得当。但问题是,当我从其他项目外调用函数时,它不会加载该文本文件(我正确链接了.lib文件,除了加载该文件外,其他所有工作都正常)。引用C静态库中的文件

任何想法如何从.lib文件加载文本文件只是通过相对路径?

在此先感谢..

以下是库测试功能定义

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

的test.lib文件是建立和创造了这一点。 只需访问当前文件夹hello.txt文件,但从其他项目调用此函数时。它说文件错误。

+1

你的代码实际上是什么样的? – bobbymcr 2011-12-27 09:05:50

+0

显示打开该文本文件的taht函数的代码以及使用该库的应用程序 – 2011-12-27 09:10:26

+0

不管您是从lib代码还是从其他代码加载文件,都不应该有任何区别。但请确保您知道当前目录的真实含义! – codeling 2011-12-27 09:20:45

回答

2

修改代码来看看errno

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

... 

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

再抬头看errno的含义您的操作系统,看看发生了什么事情。

+0

谢谢你,当然,编辑我的回应。 – 2011-12-27 10:23:17

+1

你是不是指'strerror(errno)'?你也可以用'perror'作为'if(!fp){perror(“fopen”);/*处理错误* /}' – 2011-12-27 11:16:34

+0

duh ... fixed(我没有看到arg初始化,而且我已经使用C很长时间了)。 – 2011-12-27 11:19:15

0

我很确定你从图书馆调用这个函数的事实是red herring

最可能发生的事情是您的hello.txt文件不在执行过程的working directory中。继续并在您的项目中输入#include <windows.h>,然后使用GetCurrentDirectory函数查看运行程序时工作目录的内容。最有可能的是,它与你的文本文件不一样。

要解决这个问题,您可以执行以下两件事之一:您可以更改程序的启动设置(无论是从Visual Studio还是Windows快捷方式)以指定工作目录(称为“Start in:” Windows快捷方式)作为要打开的文本文件的路径,或者可以确定程序使用的工作目录,然后将文本文件移动到那里。

编辑:另外,如果你希望应用程序使用它自己的目录(其中的可执行文件实际驻留),您可以使用GetModuleFileName函数来获取可执行文件的完整路径。当然,你必须在程序产生的字符串末尾修剪程序的文件名,但这应该是小菜一碟。

-2

检查你的文件路径并打印一个errno,我认为你有一个静态文件路径

+0

-1。虽然这在技术上是准确的,但它非常简洁而且没有信息。 – 2011-12-27 10:32:44