2011-12-27 9 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ファイルにアクセスするだけですが、この関数が他のProjectから呼び出されたときです。ファイルエラーです。

+1

コードは実際にどのように見えますか? – bobbymcr

+0

そのテキストファイルを開くtaht関数のコードと、そのライブラリを使用するアプリケーションを表示します。 –

+0

libコード内または他のコードからファイルを読み込むかどうかには違いはありません。しかし、現在のディレクトリが本当に何であるかを知っていることを確認してください! – codeling

答えて

2

errnoを見て、あなたのコードを変更します。その後、

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

... 

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

そして、何が起こっているかを確認するために、ご使用のオペレーティング・システム上でerrnoの意味を調べます。

+0

があります。ありがとうございました。 –

+1

'strerror(errno)'を意味しましたか?代わりに 'perror'を' if(!fp){perror( "fopen");}として使うこともできます。/* Handle error * /} ' –

+0

duh ... fixed(私はargを最初に見なかったし、Cを使っていたので長い時間がかかりました)。 –

0

ライブラリからこの関数を呼び出すという事実は、確かに確信しています。red herringです。

あなたのhello.txtファイルが実行中のプロセスのworking directoryに存在しない可能性があります。プロジェクト内の#include <windows.h>に進み、GetCurrentDirectory関数を使用して、プログラムを実行するときの作業ディレクトリを確認します。ほとんどの場合、テキストファイルと同じパスではありません。

これを解決するには、プログラムの起動設定をVisual StudioまたはWindowsのショートカットから変更して、作業ディレクトリを指定することができます。 Windowsのショートカット)を開きたいテキストファイルへのパスにするか、プログラムがどの作業ディレクトリを使用しているかを把握し、代わりにテキストファイルを移動することができます。

編集:あなたは(実行ファイルが実際に存在する場所)アプリケーションが独自のディレクトリを使用する場合はまた、あなたが実行可能ファイルのフルパスを取得するにはGetModuleFileName機能を使用することができます。もちろん、作成する文字列の終わりにプログラムのファイル名をトリムする必要がありますが、それはケーキの部分でなければなりません。

-2

ファイルパスを確認し、エラー番号を出力してください。静的ファイルパスがあると思います。

+0

-1。これは技術的には正確ではありますが、ひどく簡潔で情報がありません。 –

関連する問題