تحية طيبة وسلامٌ عليكم،
في محاولتك لقراءة ملفات النص من مجلد محدد وحفظ أسماء هذه الملفات في vector من السلاسل، تظهر بعض الأخطاء في الكود الخاص بك يجب عليك مراجعةها لتحقيق الوظيفة المطلوبة. سأقدم لك شرحًا تفصيليًا للمشكلات المحتملة وكيفية حلها.
أولًا، استخدم الدالة PathCombine
لتكوين مسار الملف بدلاً من دمج السلاسل يدويًا. يمكن أن يساعد ذلك في تفادي أخطاء التنسيق.
cpp#include
#include
#include
#include
using namespace std;
struct Data {
vector name;
};
int main() {
Data Dataset;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
// Find the first file in the directory.
hFind = FindFirstFile(L"C:\\Users\\bla\\Desktop\\c++\\data\\*", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE) {
cout << "ERROR" << endl;
} else {
do {
if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) {
// Construct the full path of the file
TCHAR filePath[MAX_PATH];
PathCombine(filePath, L"C:\\Users\\bla\\Desktop\\c++\\data\\", FindFileData.cFileName);
// Check if the file has a .txt extension
if (_tcsstr(FindFileData.cFileName, L".txt")) {
Dataset.name.push_back(FindFileData.cFileName);
}
wcout << FindFileData.cFileName << endl;
}
} while (FindNextFile(hFind, &FindFileData) != 0);
FindClose(hFind);
}
for (int i = 0; i < Dataset.name.size(); i++) {
cout << Dataset.name[i] << endl;
}
return 0;
}
تأكد من أنك تقوم بفحص امتداد الملف بشكل صحيح باستخدام _tcsstr
وأيضًا قم بالتحقق من أن الدليل الذي تحاول البحث فيه يحتوي على الملفات التي تبحث عنها.
أتمنى لك التوفيق في برمجتك، وفي حالة وجود أي استفسارات إضافية، فلا تتردد في طرحها.
المزيد من المعلومات
بالطبع، سأقدم المزيد من المعلومات والتوضيح حول الكود الخاص بك والتغييرات التي قمت بها.
-
استخدام
do-while
بدلاً منwhile
:
قمت بتغيير الحلقةwhile
إلى حلقةdo-while
لضمان تنفيذ الكود داخل الحلقة على الأقل مرة واحدة. هذا يحل مشكلة إضافة ملفات إلى ال vector حتى في حالة وجود ملف واحد فقط.cppdo { // ... } while (FindNextFile(hFind, &FindFileData) != 0);
-
استخدام
_tcsstr
بشكل صحيح:
قمت بتحديد امتداد الملف باستخدام_tcsstr
بشكل صحيح، مما يسمح للكود بالعمل بشكل صحيح مع تنسيقات الملفات المختلفة (مثل .txt).cppif (_tcsstr(FindFileData.cFileName, L".txt")) { // ... }
-
استخدام
PathCombine
لبناء مسار الملف:
قمت بتحسين بناء مسار الملف باستخدامPathCombine
، الذي يقوم بالتعامل مع تفاصيل تنسيق المسارات بشكل صحيح.cppTCHAR filePath[MAX_PATH]; PathCombine(filePath, L"C:\\Users\\bla\\Desktop\\c++\\data\\", FindFileData.cFileName);
-
التحقق من أن الملف ليس دليلاً:
قمت بإضافة شرط للتحقق من أن العنصر الذي تم العثور عليه ليس دليلًا، للتأكد من أننا نقوم بجلب الملفات فقط.cppif (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { // ... }
بهذه التعديلات، يجب أن يكون لديك القدرة على قراءة ملفات النص من المجلد المحدد وحفظ أسماء هذه الملفات في vector بنجاح. إذا كانت هناك أي أسئلة إضافية أو تحتاج إلى مساعدة إضافية، فأنا هنا للمساعدة.