الحصول على المسار واسم جميع الملفات في دير لها subdirs
-
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*/);