التنقل من خلال الملفات باستخدام ديرنت.ح?[مكررة]

StackOverflow https://stackoverflow.com//questions/25070751

  •  26-12-2019
  •  | 
  •  

سؤال

أود أن أعرف كيف يمكنني التنقل وتحرير المجلدات والملفات من خلال التعليمات البرمجية في ج.لقد بحثت عن مكتبة ديرنت.ح لكنني لست متأكدا من الوظائف المستخدمة لعبور الدلائل.أنا حتى استخدام المكتبة الصحيحة لهذه الحالة ، وإذا كان الأمر كذلك ، هل يمكن أن تعطي شرحا موجزا لعدد قليل من الوظائف الأساسية وسوف تحتاج إلى التحرك حول المجلدات وتغيير الملفات.أيضا, لا بد لي من استخدام مؤشر من نوع ما لتتبع الدليل الذي أنا حاليا في, كما لو كنت مع قائمة مرتبطة?هل أحتاج إلى إنشاء شجرة ثنائية من أجل الحصول على شيء يمكن أن يشير إليه المؤشر?

هل كانت مفيدة؟

المحلول

أهم الوظائف هي:

أوبندير (كونست شار *) - يفتح الدليل وإرجاع كائن من نوع دير

قراءة (دير*) - يقرأ محتوى الدليل وإرجاع كائن من نوع ديرنت (البنية)

كلوسيدير (دير *) - يغلق الدليل

على سبيل المثال ، يمكنك سرد محتوى الدليل باستخدام هذا الرمز:

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

char *pathcat(const char *str1, char *str2);

int main()
{
    struct dirent *dp;
    char *fullpath;
    const char *path="C:\\test\\"; // Directory target
    DIR *dir = opendir(path); // Open the directory - dir contains a pointer to manage the dir
    while (dp=readdir(dir)) // if dp is null, there's no more content to read
    {
        fullpath = pathcat(path, dp->d_name);
        printf("%s\n", fullpath);
        free(fullpath);
    }
    closedir(dir); // close the handle (pointer)
    return 0;
}

char *pathcat(const char *str1, char *str2)
{
    char *res;
    size_t strlen1 = strlen(str1);
    size_t strlen2 = strlen(str2);
    int i, j;
    res = malloc((strlen1+strlen2+1)*sizeof *res);
    strcpy(res, str1);
    for (i=strlen1, j=0; ((i<(strlen1+strlen2)) && (j<strlen2)); i++, j++)
        res[i] = str2[j];
    res[strlen1+strlen2] = '\0';
    return res;
}

وظيفة باثكات ببساطة تسلسل 2 مسارات.

يقوم هذا الرمز بمسح الدليل المختار فقط (وليس الدلائل الفرعية).يجب عليك إنشاء التعليمات البرمجية الخاصة بك لأداء 'في العمق' المسح الضوئي (وظيفة العودية ، إلخ.).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top