الحصول على المسار واسم جميع الملفات في دير لها subdirs

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

  •  19-08-2019
  •  | 
  •  

سؤال

أنا أعطيت هذا الكود في حين يعود.وأخيرا حصلت حول اختبار (مع بعض التغييرات على وضع الملفات في مكان مختلف)...

void AddFiles(AnsiString path/*, TDataSet *DataSet*/)
{
TSearchRec sr;
int f;
    f = FindFirst(path+"\\*.*", faAnyFile, sr);
    while( !f )
    {
        if(sr.Attr & faDirectory)
        {
                if(sr.Name != "."   &&   sr.Name != "..")
                {
                        path.sprintf("%s%s%s", path, "\\", sr.Name);
                        AddFiles(path/*, DataSet*/);
                }
        }
        else
        {
                Form1->ListBox1->Items->Add(path+ "\\"+ sr.Name);
                //DataSet->Append();
                //DataSet->FieldByName("Name")->Value = sr.Name;
                /* other fields ... */
                //DataSet->Post();
        }
        f = FindNext(sr);
    }
    FindClose(sr);
}

فإنه لا يعمل بشكل صحيح.في بداية الأمر ويختلط..

حقيقي هيكل...

الجذر root\subdir1 root\subdir2 root\subdir3

افسدت يحصل مثل هذا...

الجذر root\subdir1 root\subdir1\subdir2 root\subdir1\subdir2\subdir3

و في نهاية المطاف يتوقف بما في ذلك الجذر أو sub\المجلدات الفرعية و 'مسار' فقط يحتوي على مجلد فرعي (بدون المجلدات الجذر)

هذا هو عديمة الفائدة تماما عن aquring صالحة للاستعمال كامل مسار الملفات.

لذلك إما هل يمكنك أن تخبرني أين هو رمز خطأ... أو تعطيني بعض النصائح حول كيفية الحصول على المسار الكامل أسماء في دير وجميع subdirs.

أريد أن يكون الأساسية بقدر الإمكان.أيليس من غير المألوف المتقدمة c++ الميزات.الاشياء التي باني مستجد من المرجح أن تكون قادرة على التصحيح.

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

المحلول

هنا يمكنك إلحاق كل subpath إلى المسار الحالي:

path.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(path/*, DataSet*/);

استخدام متغير جديد جنبا إلى جنب الطريق حتى لا تفسد path متغير كنت لا تزال بحاجة لبقية الملفات/تطبيق الاستعراض المفصل في الدليل:

AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top