标签: readdir

readdir以d_type == DT_UNKNOWN为目录返回dirent.和

我有以下代码模仿ls:

#include <dirent.h>
#include <stdio.h>

char* dirent_type_to_str(unsigned char dirent_type) {
  switch (dirent_type) {
  case DT_DIR:
    return "Dir ";
  case DT_REG:
    return "File";
  }

  printf("DEBUG: Unknown type %x\n", dirent_type);
  return "Unk ";
}

int main(int argc, char** argv) {
  char* dir_path = argc > 1 ? argv[1] : ".";
  DIR* dir_stream = opendir(dir_path);

  struct dirent* dirent_ptr;
  while (dirent_ptr = readdir(dir_stream)) {
    printf("%s %s\n", dirent_type_to_str(dirent_ptr->d_type), dirent_ptr->d_name);
  }

  closedir(dir_stream);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我运行该程序时,它表示d_type与之关联.并且..未知:

james.ko@cslab1-20:~/Desktop/systems-11-02$ ./main …
Run Code Online (Sandbox Code Playgroud)

c linux operating-system posix readdir

4
推荐指数
1
解决办法
1575
查看次数

Perl程序可有效处理目录中的500,000个小文件

我每天晚上都在处理一个大目录。每晚它会累积大约一百万个文件,其中一半.txt是我需要根据其内容移动到其他目录的文件。

每个.txt文件都是用管道分隔的,并且仅包含20条记录。记录6是包含我需要确定将文件移动到哪个目录的信息的记录。

记录示例:

A|CHNL_ID|4
Run Code Online (Sandbox Code Playgroud)

在这种情况下,文件将移至/out/4

此脚本的处理速度为每小时80,000个文件。

关于如何加快速度有什么建议吗?

opendir(DIR, $dir) or die "$!\n";
while ( defined( my $txtFile = readdir DIR ) ) {
    next if( $txtFile !~ /.txt$/ );
    $cnt++;

    local $/;
    open my $fh, '<', $txtFile or die $!, $/;
    my $data  = <$fh>;
    my ($channel) =  $data =~ /A\|CHNL_ID\|(\d+)/i;
    close($fh);

    move ($txtFile, "$outDir/$channel") or die $!, $/;
}
closedir(DIR);
Run Code Online (Sandbox Code Playgroud)

regex perl aix readdir file-processing

4
推荐指数
1
解决办法
357
查看次数

PHP readdir()返回"."和".."条目

我正在为我的公司编写一个简单的Web报告系统.我为index.php编写了一个脚本,该脚本获取"reports"目录中的文件列表,并自动创建指向该报告的链接.它工作正常,但我的问题是readdir()不断返回.和..目录指针以及目录的内容.是否有任何方法可以阻止此其他循环通过返回的数组并手动剥离它们?

以下是好奇的相关代码:

//Open the "reports" directory
$reportDir = opendir('reports');

//Loop through each file
while (false !== ($report = readdir($reportDir)))
{
  //Convert the filename to a proper title format
  $reportTitle = str_replace(array('_', '.php'), array(' ', ''), $report);
  $reportTitle = strtolower($reportTitle);
  $reportTitle = ucwords($reportTitle);

  //Output link
  echo "<a href=\"viewreport.php?" . $report . "\">$reportTitle</a><br />";
}

//Close the directory
closedir($reportDir);
Run Code Online (Sandbox Code Playgroud)

php linux readdir

3
推荐指数
1
解决办法
7778
查看次数

Readdir/closedir - Valgrind 显示“无效读取”

在此处发布我的代码片段。我正试图在调试中立足。

struct dirent *s_dirent;
char path[300];
....
bzero(path,300);
...
fd_dir = opendir(path);
while((s_dirent = readdir(fd_dir))!=NULL)
{
     if(s_dirent->d_name[0] == '.')
          continue;
     else
          break;
 }
if(s_dirent == NULL)
{
   if(closedir(fd_dir)!=0)
       perror("Error on closedir");
 }
else
{

  if(closedir(fd_dir)!=0)/*Line number 249*/
      perror("Error on closedir");

  /*some comments*/
  strcat(path,"/");
  strcat(path,s_dirent->d_name);/*Line number 254*/
 }
Run Code Online (Sandbox Code Playgroud)

Valgrind 输出:

==3287== Invalid read of size 1
==3287==    at 0x40069E0: strcat (mc_replace_strmem.c:176)
==3287==    by 0x804D6B4: online_bck (backup_manager.c:254)
==3287==    by 0x8049F96: on_bck_beg (TxFS_manager.c:181)
==3287==    by 0x8049818: handler (Reader.c:236)
==3287==    by 0xBF5F18: start_thread (in …
Run Code Online (Sandbox Code Playgroud)

c linux valgrind readdir

3
推荐指数
1
解决办法
2023
查看次数

使用readdir_r读取目录

很长一段时间以来,我一直在检查和使用这个程序而没有成功,希望你能帮助我.

想法是读取存储的目录c_Localpath并将读取的dirs复制到其中c_namesLocal以返回它们.

我在实施中做错了吗?程序打破了strcpy,我不知道为什么.

DIR* ptr_dir = opendir(c_Localpath);

char** c_namesLocal = calloc(1, 256);

    size_t numElements = 0;
    int returnCode =0;
    struct dirent ptr_PrevDirEntry;
    struct dirent* ptr_DirEntry = NULL;
    returnCode = readdir_r(ptr_dir, &ptr_PrevDirEntry,
            &ptr_DirEntry);

    while ((returnCode ==0) && (ptr_DirEntry != NULL)) {
        char* name = c_namesLocal[numElements];
        strcpy(name, ptr_DirEntry->d_name);
        ptr_PrevDirEntry = *ptr_DirEntry;
        returnCode = readdir_r(ptr_dir, &ptr_PrevDirEntry,
                &ptr_DirEntry);
        numElements++;
        c_namesLocal = realloc(c_namesLocal, 256 * numElements);
    }
Run Code Online (Sandbox Code Playgroud)

c readdir

3
推荐指数
1
解决办法
8758
查看次数

C - Linux稀疏文件:如何检查文件是否稀疏并打印0填充的磁盘块

我想要做的是在linux上编写一个C程序,如果有稀疏文件,应该在当前目录中检查,并且我还要打印已经代表文件中的间隙和数量的磁盘块数量磁盘块是0填充但占用磁盘空间.

到目前为止,我可以访问当前目录并打印文件

DIR *dirp;
struct dirent *dp;
Run Code Online (Sandbox Code Playgroud)

为了完成第二部分,我尝试使用稀疏文件,stat()但它似乎没有工作,因为我没有得到所需的结果,因为我希望.

那么,有人能告诉我如何使用稀疏文件做这个部分吗?

c linux stat sparse-matrix readdir

3
推荐指数
1
解决办法
3119
查看次数

C d_name[256] 中的 struct dirent 和 NAME_MAX 定义

d_name[256]我对 struct dirent 定义中的使用感到困惑NAME_MAX。是否d_name[256]意味着文件名长度最多可以为 256 个字符?然后它还提到了 NAME_MAX(在底部引用)。所以,我的问题是NAME_MAX这里有什么关系以及我在哪里可以找到NAME_MAX价值和定义?

\n\n

Inman readdir struct dirent定义如下。

\n\n
struct dirent {\n    ino_t          d_ino;       /* inode number */\n    off_t          d_off;       /* not an offset; see NOTES */\n    unsigned short d_reclen;    /* length of this record */\n    unsigned char  d_type;      /* type of file; not supported\n                                    by all filesystem types */\n    char           d_name[256]; /* filename */\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

它还断言

\n\n
\n

dirent 结构中 POSIX.1\n 强制要求的唯一字段是: ,未指定大小,在终止空字节 ('\\0') …

c directory dirent.h readdir

3
推荐指数
1
解决办法
4974
查看次数

PHP递归文件夹扫描按修改日期排序

我正在使用此脚本查看子文件夹的所有子文件夹和文件

   function readfolder($dir)
    {
        global $tfile,$tdir;$i=0;$j=0;$myfiles;
        $myfiles[][] = array();
        if (is_dir($dir)) {
            if ($dh = opendir($dir)) {
                while (($file=readdir($dh)) !== false) {
                    if (!is_dir($dir."\\".$file))
                    {
                        $tfile[$i]=$file;
                        $i++;
                        echo $dir."\\".$file." <b>File</b><br>";
                    }
                    else {
                        if (($file != ".") && ($file != "..")) {
                        $tdir[$j]=$file;
                        echo $dir."\\".$file." <b>Directory</b><br>";
                        readfolder($dir."\\".$file);
                        $j++;
                        }
                    }
                }
                closedir($dh);
            }
        }
    }

    readfolder(".");
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何使用filemtime函数(或其他),以便我可以按修改日期对子翻牌和文件进行排序?

php sorting recursion readdir filemtime

2
推荐指数
1
解决办法
2264
查看次数

如何使用php搜索文件夹中的文件?

我有一个名为 的allfiles文件夹,该文件夹中有一些文件,例如

 1212-how-to-sddk-thosd.html
 3454-go-to-dlkkl-sdf.html
 0987-sfda-asf-fdf-12331.html
 4789-how-to-fdaaf-65536.html
Run Code Online (Sandbox Code Playgroud)

我以前是scandir用来列出所有文件的,现在我需要通过关键字来查找文件,exampleto-dlkkl是关键字,我会得到文件3454-go-to-dlkkl-sdf.html

Glob 似乎不起作用,并且 opendir 和 readdir 不起作用,有什么想法吗?

php glob readdir scandir opendir

2
推荐指数
1
解决办法
9241
查看次数

顺序行为中的 Readdir()

int indent = 0;
int listDir(const char* dirname){
    DIR* dir;
    struct dirent* d;
    if(!(dir = opendir(dirname)))
        return -1;
    while((d = readdir(dir)) != NULL){
        if(strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0 ){
            continue;
        }
        else if(d->d_type != DT_DIR){ // Any except folders.
            printf("%*s- %s:%ld\n", indent, "", d->d_name, d->d_ino);
        }
        else if(d->d_type == DT_DIR){ // Folders only
            printf("%*s[%s]\n", indent, "", d->d_name);
            char path[1024];
            snprintf(path, sizeof(path), "%s/%s", dirname, d->d_name);
            indent +=2;
            listDir(path);
            indent -=2;
        }
Run Code Online (Sandbox Code Playgroud)

这个函数工作得很好,但唯一的问题是它输出以下结果作为示例: 上述函数的输出

我需要输出是容器文件夹、文件和文件夹。文件夹应位于列表的末尾。例如,上面的输出应该是:

在此处输入图片说明

c sorting readdir partial-ordering

2
推荐指数
1
解决办法
153
查看次数