Мне нужно вывести файлы, отсортированные по дате создания и папкам. Я сразу же разделил все в текущем каталоге на два массива (один для файлов и один для файлов), а затем проделал с ними работу, но внезапно я понял, что у меня есть два ПОДОБНЫХ массива. Мне нужна помощь.
#define _DEFAULT_SOURCE ;
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void insertionSort(struct stat* myArray)
{
for(int i = 0; i < sizeof(myArray)/sizeof(struct stat); ++i)
{
int j = i - 1;
while (j >= 0 && myArray[j].st_ctime > myArray[i].st_ctime)
{
myArray[j + 1].st_ctime = myArray[j].st_ctime;
j = j - 1;
}
myArray[j + 1].st_ctime = myArray[i].st_ctime;
}
}
int main()
{
char cwd[PATH_MAX];
if (getcwd(cwd, sizeof(cwd)) != NULL)
{
struct dirent *pDirent;
DIR *pDir;
pDir = opendir(cwd);
if(pDir != NULL)
{
struct stat sb;
struct stat* fileArray;
struct stat* folderArray;
fileArray = malloc(sizeof(struct stat));
folderArray = malloc(sizeof(struct stat));
int fiIndex = 0, foIndex = 0;
while ((pDirent = readdir(pDir)) != NULL)
{
if(strcmp(pDirent->d_name, ".") != 0
&& strcmp(pDirent->d_name, "..") != 0)
{
stat(pDirent->d_name,&sb);
//I suppose that the mistake is somewhere in this switch but I'm not really so sure
switch (sb.st_mode & S_IFMT)
{
case S_IFDIR:
folderArray[foIndex++] = sb;
folderArray = realloc(folderArray, sizeof(folderArray)+sizeof(struct stat));
break;
case S_IFREG:
fileArray[fiIndex++] = sb;
folderArray = realloc(fileArray, sizeof(fileArray)+sizeof(struct stat));
break;
}
}
}
insertionSort(fileArray);
insertionSort(folderArray);
for(int i = 0; i<sizeof(fileArray)/sizeof(stat); ++i)
{
rewinddir(pDir);
while ((pDirent = readdir(pDir)) != NULL)
{
if(strcmp(pDirent->d_name, ".") != 0
&& strcmp(pDirent->d_name, "..") != 0)
{
stat(pDirent->d_name,&sb);
if(sb.st_ino == fileArray[i].st_ino)
{
printf("%s\n",pDirent->d_name);
}
}
}
}
}
closedir(pDir);
}
return 0;
}
И еще у меня есть несколько вопросов, например, должен ли я вообще использовать переключатель? Есть ли более элегантный способ сравнения файлов или папок? То же самое и с печатью, я думаю, что сделал ее некрасивой: /