2016-12-05 12 views
0

ディレクトリを開いてfopenを使ってファイルを開くことができるかどうかを知りたいです。例のように:C - opendir + fopen

私はMAINDIRを持っており、その中に私は、私は次の操作を実行したいと思いFILE.TXTています

void openFile(const char * filename) 
{ 
    opendir(MAINDIR); 
    fopen(filename, "r"); 
} 

int main() 
{ 
    openFile("file.txt"); 
    return 0; 
} 

私は私が行うことができます知っている:のfopen( "パス//main/dir/filename.txt "、" r ")しかし、もっと一般的なものが欲しいです。

おかげ

+2

'opendir'はそれをしません。' chdir'を試してください。 –

答えて

4

をディレクトリを開き、そのディレクトリ内のすべてのfopen仕事をするあなたは、例えばchdir(const char *)を使用して作業ディレクトリを変更することができます。

chdir("/your/path/") 
2

あなたはchdirいじり好きではない場合は、ファイルを開くときに完全なパスを作成するだけです:

void openFile(const char * filename) 
{ 
    char fullpath[MAXPATHLEN]; 
    sprint(fullpath, "%s/%s", MAINDIR, filename); 
    fopen(fullpath, "r"); 
} 

urn何か。

0

opendirは、ディレクトリの内容を読み取るためのもので、相対パスが解決される方法は変わりません。相対パスの開始点を変更するには、chdirを使用する必要があります。

chdir(MAINDIR); 
...fopen(relative_path,...); 
0

opendir()機能は、あなたがやりたいことはありません。 POSIXで指定されているようにCではなく、どこにもないディレクトリ・エントリを読み取る手段を提供しますが、ファイル名解決には影響しません。ファイル名の解決には影響しません。最初にopendir()を提供する実装では、

一方、POSIX環境ではchdir()が提供されており、は現在の作業ディレクトリに変更されているため、相対ファイル名を解決するための基礎となります。それはあなたが求めるものを達成することができます。ただし、作業ディレクトリはプロセス全体のプロパティであることに注意してください。通常は、絶対パスまたは絶対パスを作業ディレクトリに対して相対的に構築して使用し、作業ディレクトリをプログラムの起動時にそのまま残すことをお勧めします。