ディレクトリ関連

ディレクトリ関連の関数を使用するにはdirect.hincludeすればいい。

ディレクトリの作成
1.
2.
#include <direct.h>
int mkdir(const char *pathname);
ディレクトリを作るのは、すでに存在するディレクトリ内でなければならない。
成功すると0、失敗すると非0を返す。

ディレクトリの削除
1.
2.
#include <direct.h>
int rmdir(const char *pathname);
空のディレクトリでなければ削除できない。
成功すると0、失敗すると非0を返す。


2010/05/23追記
mkdir関数は_mkdir関数に置き換わっている。

作成に成功すれば0を返し、失敗すると-1を返す。
 また、失敗した場合errnoに値が格納され、すでに存在するディレクトリ名を指定していた場合EXISTとなるのでディレクトリの存在確認にも使用できるはず。

また、ワイド文字バージョンも存在する。
教えて!goo「C ファイル出力で、フォルダがない場合でも作成する方法」
msdn「_mkdir、_wmkdir」

カレントディレクトリの変更
1.
2.
#include <direct.h>
int chdir(const char *pathname);
成功すると0、失敗すると非0を返す。

以前、実行時のカレントディレクトリの違いによって悩まされたことから、ファイル入出力をするときのカレントディレクトリを意識するようになった。
 その結果、main関数の引数からexeファイルのパスを取得し、そのパスを使って絶対パスでファイル名を指定するようになった。
 でも、chdirを使えばこれまで通りファイル名だけでも意図した通りのディレクトリにファイルを作ることができる。

カレントディレクトリの変更
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
#include <stdio.h>
#include <direct.h>
#include <windows.h>    // GetCurrentDirectory

int main(void)
{
    char s[256];

    GetCurrentDirectory(255,s);
    printf("current : %s\n", s);

    // ディレクトリ削除
    printf("del dir\n");
    if( rmdir("dir") != 0 )
    {
        perror("rmdir");
    }

    // ディレクトリ作成
    printf("make dir\n");
    if( mkdir("dir") != 0 )
    {
        perror("mkdir");
    }

    // カレントを作成したディレクトリに変更
    printf("chenge dir\n");
    chdir("dir");

    GetCurrentDirectory(255,s);
    printf("current : %s\n", s);

    // 1つ上の階層(元のカレントディレクトリ)へ
    printf("chenge dir\n");
    chdir("../");

    GetCurrentDirectory(255,s);
    printf("current : %s\n", s);

    {
        char c;
        c = getchar();
    }
    return 0;
}

0 件のコメント:

コメントを投稿