Создать текстовый файл, в который поместить информацию о списке подпапок текущей папки - C (СИ)
Формулировка задачи:
Добрый день, есть задание, но нет идей с помощью каких инструментов его реализовывать. Не могли бы вы направить, указать что изучить, какими операторами воспользоваться?
В текущей папке создать папки с именами, указанными в качестве параметров командной строки. Создать текстовый файл, в который поместить информацию о списке подпапок текущей папки.
P.S. Задание относится к теме операций ввода-вывода, но пока все что я нашел, это работа с файлами, о том, как работать с папками информация не попадалась.
Ввысь
Решение задачи: «Создать текстовый файл, в который поместить информацию о списке подпапок текущей папки»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #ifdef UNIX #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <dirent.h> #include <errno.h> #elif WINDOWS #include <windows.h> #endif #define OUTPUT_FILE_NAME "directories.txt" static void CreateDirectories(int argc, char* argv[]); static void PrintDataToFile(const char* const fileName); int main(int argc, char* argv[]) { CreateDirectories(argc, argv); PrintDataToFile(OUTPUT_FILE_NAME); return 0; } static void CreateDirectories(int argc, char* argv[]) { #ifdef UNIX int i = 0; int errorCode = 0; int mode = 0700; struct stat st = {0}; for(i = 1; i < argc; i++) { if (!(stat(argv[i], &st) != -1)) { errorCode = mkdir(argv[i], mode); if (errorCode != 0) { printf("Error: failed to create directory '%s' (%d, %s)\n", argv[i], errorCode, strerror(errno)); } else { printf("Created: '/%s/'\n", argv[i]); } } } #elif WINDOWS int i = 0; int errorCode = 0; int directoryExists = 0; DWORD attributes = 0; char errorString[256]; for(i = 1; i < argc; i++) { attributes = GetFileAttributes(argv[i]); directoryExists = (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY)); if (!directoryExists) { errorCode = CreateDirectory(argv[i], NULL); if (errorCode == 0) { errorCode = GetLastError(); if (errorCode != 0) { FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errorCode, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), errorString, sizeof(errorString)-1, NULL); printf("Error: failed to create directory '%s' (%d, %s)\n", argv[i], errorCode, errorString); } } else { printf("Created: '/%s/'\n", argv[i]); } errorCode = 0; } } #endif } static void PrintDataToFile(const char* const fileName) { #ifdef UNIX FILE* f = NULL; DIR* dp = NULL; struct dirent* ent = NULL; struct stat st; dp = opendir("."); if (dp == NULL) { printf("Error: failed to open directory '%s' (%d, %s)\n", ".", errno, strerror(errno)); } else { f = fopen(fileName, "w"); ent = readdir(dp); while (ent != NULL) { stat(ent->d_name, &st); if (S_ISDIR(st.st_mode)) { fprintf(f, "%s\n", ent->d_name); } ent = readdir(dp); } closedir(dp); fclose(f); f = NULL; } #elif WINDOWS char* dirName = NULL; WIN32_FIND_DATA fd; FILE* f = NULL; HANDLE handle; handle = FindFirstFile("*.", &fd); if (handle != INVALID_HANDLE_VALUE) { f = fopen(fileName, "w"); do { dirName = fd.cFileName; if (strcmp(dirName, ".") != 0 && strcmp(dirName, "..") != 0) { fprintf(f, "%s\n", dirName); } } while (FindNextFile(handle, &fd)); FindClose(handle); fclose(f); f = NULL; } else { printf ("FindFirstFile failed (%d)\n", GetLastError()); } #endif }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д