指定ディレクトリにある特定のファイルを別ディレクトリに移動したい
ディレクトリを指定し、そのディレクトリの中にあるファイルの情報を1つずつ読みながら、ある文字列を含むファイルを別ディレクトリに移動させたいです。
例えば、指定ディレクトリ(/Users/name/Downloads)内にあるファイルのうちファイル名に「TESTMOVE」という名前が入ったファイルのみを指定ディレクトリとは別のディレクトリ(/Users/name/Downloads/TESTMOVE)に移動したいときはどう書けばいいでしょうか。
現在、指定文字列の検索(含む、含まないの表示)まではうまくいっていますが、この先が思いつきません。
該当のソースコード
int main(void) { DIR *dir; /* ディレクトリを保存するための変数 */ struct dirent *dp; /* ディレクトリ情報を保存するための構造体宣言 */ char path[64] = "/Users/name/Downloads"; /* 読込先のディレクトリ */ char str1[] = "TESTMOVE"; char newPath[64] = "C:\moveFile/"; /*新しいディレクトリ*/ //①opendir によりファイルをオープン if ((dir = opendir(path)) == NULL) { perror("opendir"); exit(-1); } //②readdir でディレクトリを読む //『readdir()関数がNULLを返すまで続行』 for (dp = readdir(dir); dp != NULL; dp = readdir(dir)) { printf("%s\n", dp->d_name); //strstr()関数で文字列内の文字検索 if (strstr(dp->d_name, str1) != NULL) { printf("含まれる\n"); //ファイルのディレクトリを移動(ここから) if (MoveFile((LPCTSTR)path,(LPCTSTR)newPath)) { puts("移動しました。"); } else { puts("移動に失敗しました。"); } } else { printf("含まれない\n"); } } //③closedir でディレクトリをクローズ closedir(dir); //コンソールを表示したままにする system("pause"); return 0; }
よろしくお願いいたします。
追記:dp->d_nameが単純にファイル名のみ表示されており、これをrename()とかで名前を変えようかと思ったのですが、dp->d_nameにファイル名しか取得されてないことを考えると単純に「ファイル名」⇒「移動先/ファイル名」みたいに変えてしまっていいのか疑問です。
また、効率のいい方法があったらご教示頂きたいです。