Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как получить список каталогов в C?
Как вы сканируете каталог на наличие папок и файлов в C? Он должен быть кроссплатформенным.
Следующая программа POSIX выведет имена файлов в текущем каталоге:
#define _XOPEN_SOURCE 700
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
Кредит: http://www.gnu.org/software/libtool/manual/libc/Simple-Directory-Lister.html
Испытано в Ubuntu 16.04.
Строгий ответ - "вы не можете", поскольку само понятие папки не является действительно кросс-платформенным.
На платформах MS вы можете использовать _findfirst, _findnext и _findclose для 'c' типа feel, а также FindFirstFile и FindNextFile для базовых вызовов Win32.
Вот ответ на C-FAQ:
http://c-faq.com/osdep/readdir.html
Я создал заголовок open source (BSD) C, который решает эту проблему. В настоящее время он поддерживает POSIX и Windows. Пожалуйста, проверьте это:
https://github.com/cxong/tinydir
tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");
while (dir.has_next)
{
tinydir_file file;
tinydir_readfile(&dir, &file);
printf("%s", file.name);
if (file.is_dir)
{
printf("/");
}
printf("\n");
tinydir_next(&dir);
}
tinydir_close(&dir);
GLib -это библиотека переносимости / утилиты для C, которая составляет основу графического инструментария GTK+. Его можно использовать как отдельную библиотеку.
Он содержит портативные оболочки для управления каталогами. Смотрите Глеб файл утилиты документацию для деталей.
Лично я бы даже не рассматривал возможность написания больших объемов C-кода без чего-то вроде GLib позади меня. Переносимость-это одно, но также приятно получить структуры данных, помощники потоков, события, mainloops и т. д. бесплатно
Джайкс, я почти начинаю говорить как продавец:) (не волнуйтесь, glib-это открытый исходный код (LGPL) , и я никоим образом не связан с ним)
каталог файлов/вызове readdir являются POSIX. Если POSIX недостаточно для переносимости, которую вы хотите достичь, проверьте Apache Portable Runtime
Список каталогов сильно варьируется в зависимости от рассматриваемой платформы OS/. Это происходит потому, что различные операционные системы используют свои собственные внутренние системные вызовы для достижения этой цели.
Решением этой проблемы был бы поиск библиотеки, которая маскирует эту проблему и переносима. К сожалению, нет решения, которое работает на всех платформах безупречно.
В системах, совместимых с POSIX, вы можете использовать библиотеку для достижения этой цели, используя код, опубликованный Клейтоном (на который ссылается первоначально из книги Advanced Programming under UNIX W. Richard Stevens). это решение будет работать под *NIX системами, а также будет работать на Windows, если у вас установлен Cygwin.
Кроме того, вы можете написать код для обнаружения базового OS и затем вызвать соответствующую функцию перечисления каталогов, которая будет содержать 'proper' способ перечисления структуры каталогов под этим OS.
Пример кода можно найти по ссылке wikibooks
/**************************************************************
* A simpler and shorter implementation of ls(1)
* ls(1) is very similar to the DIR command on DOS and Windows.
**************************************************************/
#include <stdio.h>
#include <dirent.h>
int listdir(const char *path)
{
struct dirent *entry;
DIR *dp;
dp = opendir(path);
if (dp == NULL)
{
perror("opendir");
return -1;
}
while((entry = readdir(dp)))
puts(entry->d_name);
closedir(dp);
return 0;
}
int main(int argc, char **argv) {
int counter = 1;
if (argc == 1)
listdir(".");
while (++counter <= argc) {
printf("\nListing %s...\n", argv[counter-1]);
listdir(argv[counter-1]);
}
return 0;
}
Уже поздно, но, наверное, я не могу сдержаться...
Используя C int system(char*) , вы можете делать все виды вещей через "portable" C-интерфейс. Вам нужно будет загрузить приложение на системном языке (например, Shell/Bash, DOS, PowerShell), но, по крайней мере, вам не нужно будет связывать дополнительные библиотеки. AND, в отличие от dirent , вы можете делать все виды "platform independent" вещей, используя его.
Пример листинга каталогов с linux (в основном псевдо):
system("ls . > some_file_or_pipe_or_whatever") //
fscanf(file_or_pipe_or_whatever, "%s", a_line_from_ls);