|
まず最初に、過去ログに同じ質問があるのにすみません。
過去ログのサンプルを見てもどうしても分からなかったので、
質問させてください。
まず、ディレクトリ内にあるファイル一覧を取得し、そのファイルの更新日付で昇順ソートさせたいのですが、
コンパイル後、ソート処理の部分でメモリのエラーになってしまいます。
1個ずつ調べた結果ソート処理をしてるwhile文で落ちているのまでは終えたのですが、解決策が分かりません。
ご教授お願いします。
typedef struct sort{
char sort_time[MAX_STRING];
struct sort *next;
}SORT;
<pre>int folder(char *dir)
{
WIN32_FIND_DATA FindFileData;
HANDLE hScanPointer = NULL;
SYSTEMTIME writeTime;
SORT *head = NULL; /* リストの先頭データアドレス */
SORT *before = NULL; /* 1つ前のアドレス */
SORT *point; /* 確保した領域のアドレス */
char filename[MAX_PATH];
char filepath[MAX_PATH];
char editname[20+1];
char editpath[MAX_PATH];
char select[MAX_STRING];
char edittime[MAX_STRING];
char list_buf[MAX_STRING];
int ret;
int i = 0;
int flag;
memset(filename, '\0', sizeof(filename));
strcpy(filename, dir);
strcat(filename, "\\*.txt"); /* テキストだけ検索 */
printf("フォルダ名:%s\n", filename);
hScanPointer = FindFirstFile(filename, &FindFileData);
if(hScanPointer == INVALID_HANDLE_VALUE){
return OK;
}
flag = 0;
do{
memset(editname, '\0', sizeof(editname));
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);
/* 一覧ソート用記憶領域確保 */
if( (point = (sort*)malloc(sizeof(sort) ) ) == NULL){
printf("領域確保失敗\n");
return NG;
}
memset(point->sort_time, '\0', sizeof(point->sort_time));
memcpy(point->sort_time, edittime, strlen(edittime));
if(flag == 0){
head = point; /* 構造体ポインタに先頭アドレスを設定 */
before = point;
flag = 1;
} else {
before->next = point; /* 今までの先頭ポインタを次のポインタに入れる */
before = point;
}
printf("前時間:%s\t次時間:%s\n", point->sort_time, before);
ret = nameedit(FindFileData.cFileName, editname);
if(ret != OK){
printf("ファイル名編集失敗\n");
return OK;
}
} while(FindNextFile(hScanPointer, &FindFileData));
FindClose(hScanPointer);
/* ソート処理 */
point = head; /* 先頭のポインタを元に戻す */
before = point->next;
while(point->next != NULL){
while(before != NULL){
if(memcmp(point->sort_time, before->sort_time, strlen(point->sort_time)) > 0){
memcpy(list_buf, point->sort_time, strlen(point->sort_time));
memcpy(point->sort_time, before->sort_time, strlen(point->sort_time));
memcpy(before->sort_time, list_buf, strlen(point->sort_time));
}
before = before->next;
}
point = point->next;
before = point->next;
}
while(head != NULL){
printf("ファイル名:%s\t更新日付:%s\n", editname, head->sort_time);
}
}
</pre>
|