フォルダ内のフォルダ・ファイルを拡張子で検索して検索できたすべてのファイル名を拡張子を外して配列で保持する。
とりあえず途中まで作れた。
#include <stdio.h> #include<string.h> #define MAX_FILE_OR_FOLDER_NAME_LENGTH 100 int main(void) { /* 作りたい処理:フォルダ内のフォルダ・ファイルを拡張子で検索して 検索できたすべてのファイル名を拡張子を外して配列で保持する。 */ // strrchrで後ろから\\まで検索してindexを取得し、拡張子のindexを取得すれば // その間の文字列を取得 // テストフォルダへのパス char testFolderPath[] = "フォルダのパスを入力"; /// まず1つのファイル名を検索してみる。 // 検索文字列(パスの一番最後の\\と拡張子の間の文字列) const char* pathLastDelimiter = '\\'; // テストフォルダのパスを操作するポインタ char* pFoldersOrFilesInTestFolder = NULL; // パスの一番最後の\\ぶん右にシフト // 役割:フォルダ名・ファイル名取得開始位置へアドレスをシフトすること int shiftOneToRight = 1; // フォルダ名・ファイル名の先頭アドレスを取得する。 // 役割:テストフォルダパスの最初の文字から.の前までの長さぶんループ処理を作ること // 補足:ファイル・フォルダ名の長さを取得するために使う。 pFoldersOrFilesInTestFolder = strrchr(testFolderPath, (int)pathLastDelimiter) + shiftOneToRight; // \\までの長さを取得する。 int LengthFromPathStartToLastPathDelimiter = 0; for (int i = 0; &testFolderPath[i] != pFoldersOrFilesInTestFolder; i++) { LengthFromPathStartToLastPathDelimiter++; } /// 拡張子より1つ前の位置のアドレスを取得する。 // 検索文字列(パスの一番最後の\\と拡張子の間の文字列) const char* dot = '.'; // 拡張子の.のアドレスを格納するポインタ char* pToDotOfExtention = NULL; // 拡張子の.のアドレスを取得する。 // 補足:パスの一番最後の\\から拡張子の前までの(ファイル・フォルダ名)長さを取得するために使う。 pToDotOfExtention = strrchr(testFolderPath, (int)dot); // \\から.までの長さを取得する。 int LengthFromPathDelimiterToDot = 0; // \\の次の位置から.の位置までの長さぶんループする。※あとで.は\0に置き換える for (int i = LengthFromPathStartToLastPathDelimiter; &testFolderPath[i] != pToDotOfExtention; i++) { LengthFromPathDelimiterToDot++; } /*目的:フォルダ内の検索した文字列を格納する配列への格納処理*/ // フォルダ内の検索した文字列を格納する配列 char folderOrFileNameStr[MAX_FILE_OR_FOLDER_NAME_LENGTH]; // LengthFromPathStartToLastPathDelimiterの数が添え字の最大値を超えている。 strncpy_s(folderOrFileNameStr, sizeof(folderOrFileNameStr), testFolderPath + LengthFromPathStartToLastPathDelimiter, LengthFromPathDelimiterToDot); /*目的完了*/ system("pause"); }