您好,我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <dirent.h> // Libreria encargada del tema de los directorios
#include <string.h>
void load(){
char dir[250];
DIR *carpeta;
struct dirent *archivo;
CLEAR
printf("Arrastre la carpeta a la ventana o ingrese la direccion para indexar\n");
fgets(dir,250,stdin);
carpeta = opendir(dir);
if (carpeta != NULL){
while ((archivo = readdir(carpeta))) puts (archivo->d_name);
closedir(carpeta);
}else
perror ("Error al abrir el directorio ");
getchar();
}
给定一个文件夹的地址,它会列出其中的文件,问题是当我将它们拖到控制台时它只是不读取文件,但是当我将地址直接输入文件时它会读取.c
这里将文件夹拖到窗口中:
这里我改了代码,直接输入了我拖的那个文件夹的地址
carpeta = opendir("/Users/cristoferfb/Documents/Universidad");
正如您在第二次看到的那样,它毫无问题地执行其任务。
需要注意的是,在输入名称中带有空格的文件夹时,会产生奇怪的符号:
这些\
不是名称的一部分,我试图删除它们,但最终它也不起作用。
ps:我正在使用 gcc在macOS Sierra 下工作
对于基于您的图像的第一个示例->
"/Users/cristoferfb/Documents/Universidad"
我做了一个类似的测试,但它不起作用,因为它fgets()
读取/捕获newline
示例,请尝试以下操作:.
我无法测试在终端中删除目录,因为我使用的那个不接受,但它使用的系统非常相似,它适用于这样的路径。
/ruta/a/sin/espacios_ni_descendente
如果它不适用于那种风格的路线,您仍然需要
\
在通过它们之前清理它们,方法是opendir
检查dir
使用后的内容if(isspace...
是否具有这些字符并替换它们。但正如我所说的这部分我不能看它,即使是第一个错误也是因为关于fgets
.我的
\
意思是/Users/cristoferfb/Documents/Universidad/Estructura\ de\ datos
我已经做了一些测试,并且使用这样
/Users/cristoferfb/Documents/Universidad/Estructura de datos
或这样的路由它/Users/cristoferfb/Documents/Universidad/Estructura de datos.
应该可以工作,我的意思是,在分配给应用程序时dir
和应用程序之后,if(isspace...
该函数消除了 \ 反斜杠,但留下了如下空间,如图所示。我认为这应该足够了,但如果没有,请尝试.
在最后添加我给你留下一个例子(把它当作伪代码),因为它是用来说明的,虽然它有效,但它可以改进。