文系未経験から一人前のプログラマーになるまでの日記

文系未経験でプログラマーとして採用してもらえたものの、プログラミング業務ができずに伸び悩んでいるプログラマーが会社で役に立てるようになるまでの日記です。

フォルダ内のフォルダ・ファイルを拡張子で検索して検索できたすべてのファイル名を拡張子を外して配列で保持する。

とりあえず途中まで作れた。

#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");
}

2020/3/22(日) ブログは技術ブログ以外は書きたくなったら書く

勉強時間を確保できるようになってきたし、
ブログ書く時間を勉強に当てたいので、
ブログは、書きたくなったら書くことにする。

2020/3/20(土)

目標:
①入力文字をスタティックテキストコントロールに表示する処理をできる限り作る。
②以下で質問した内容をできる限り学習する。
ja.stackoverflow.com
ja.stackoverflow.com
※作業中はどれだけ時間がかかったかを測定する。
理由:
目標達成までにかかる時間を見積もれるようになるため。

<学習以外で並行して行う作業>
1. UdemyのC、C++コースをiPadへダウンロード

結果:
<完了タスク>
②、1.

反省:

次回: