|
>それじゃ strncmp で1つずつ試すのが良いかと。
>
>1)一覧取得
>2)一覧表示(取得と同時か?)
>3)No.入力
>4)ファイル名決定
>5)ファイルオープン
一応こんな感じまで進んだのですが、
3)のNo入力でファイル名決定するような処理がどうしても分かりません。
どのようにすれば出来るのかご教授お願いします。
それ以前にフルファイル名の取得すら間違っているのでしょうか・・・?
※デバッグ用で今は入力部分がフルパス入力になっています。
/* 構造体宣言 */
struct list{
char filename[MAX_STRING];
char sort_time[MAX_STRING];
struct list *next;
};
/* フォルダ指定関数 */
int folder(char *dir)
{
WIN32_FIND_DATA FindFileData;
HANDLE hScanPointer = NULL;
SYSTEMTIME writeTime;
struct list *head = NULL; /* リストの先頭データアドレス */
char filename[MAX_STRING];
char filepath[MAX_STRING];
char edittime[MAX_STRING];
char editpath[MAX_STRING];
char select[MAX_STRING];
char list[MAX_STRING];
int ret;
int i = 0;
int flag;
memset(list, '\0', sizeof(list));
memset(filename, '\0', sizeof(filename));
strcpy(filename, dir);
strcat(filename, "\\*.txt"); /* テキストだけ検索 */
hScanPointer = FindFirstFile(filename, &FindFileData);
if(hScanPointer == INVALID_HANDLE_VALUE){
return OK;
}
flag = 0;
do{
memset(edittime, '\0', sizeof(edittime));
/* ファイル時間取得 */
FileTimeToSystemTime( &FindFileData.ftLastWriteTime, &writeTime);
/* 更新時間ソート用に時間を編集 */
sprintf(edittime, "%d%02d%d%d%d%d", writeTime.wYear, writeTime.wMonth, writeTime.wDay, writeTime.wHour, writeTime.wMinute, writeTime.wSecond);
/* リスト編集関数呼び出し */
head = add_list(FindFileData.cFileName, edittime, head, list);
} while(FindNextFile(hScanPointer, &FindFileData));
/* 編集したリストの表示 */
show_list(head);
printf("\n");
printf("ファイル詳細情報を取得したいのであれば1を\n");
printf("ファイル編集をしたいのであれば2を選択してください。\n");
printf("それ以外のキーを入力した場合、メニューに戻ります。\n");
scanf("%s", &select);
getchar();
printf("\n");
switch(atoi(select)){
case 1:
printf("フォルダ内の情報取得したいファイルNoを指定してください。\n");
memset(editpath, '\0', sizeof(editpath));
memset(filepath, '\0', sizeof(filepath));
strcpy(editpath, strtok(filename, "*"));
scanf("%s", &filepath);
printf("\n");
strcat(editpath, filepath);
file_info(editpath, list);
break;
case 2:
printf("編集をおこなうファイルNoを指定してください。\n");
memset(editpath, '\0', sizeof(editpath));
memset(filepath, '\0', sizeof(filepath));
strcpy(editpath, strtok(filename, "*"));
scanf("%s", &filepath);
printf("\n");
strcat(editpath, filepath);
file_edit(editpath);
break;
default:
printf("メニューに戻ります。\n");
ret = menu("0");
if(ret != OK){
return NG;
}
return OK;
}
/* 編集したリストの開放 */
free_list(head);
return OK;
}
/* ソート関数 */
struct list *add_list(char *filename, char *edittime, struct list *head, char *list)
{
struct list *prev;
struct list *cur;
struct list *point;
if ((point = (struct list *) malloc(sizeof(struct list))) == NULL) {
printf("領域確保失敗\n");
exit(1);
}
/* リストにデータ登録 */
strcpy(point->filename, filename);
strcpy(point->sort_time, edittime);
strcpy(list, filename); /* フルファイル名を格納 */
/* 初期はデータが無いのでNULLで初期化 */
point->next = NULL;
if (head == NULL || strcmp(edittime, head->sort_time) > 0) {
/* 今までの先頭ポインタを次のポインタに入れる */
point->next = head;
return point;
}
for (prev = cur = head; (cur = cur->next) != NULL; prev = cur) {
if (strcmp(edittime, cur->sort_time) > 0) {
point->next = cur;
break;
}
}
/* ポインタの繋ぎ変え */
prev->next = point;
return head;
}
|