PDA

View Full Version : سوال: لیست کردن فایلها و فولدر ها به روش بازگشتی



Mt.Shadow
دوشنبه 21 مرداد 1392, 09:55 صبح
سلام به همگی دوستان
من میخواسنم یه تابع بنویسم که یه string بگیره (این رشته آدرس یه پوشه یا یه درایو تو کامپیوتره)
بعد تمامی subfolder ها و فایلای اون رو توی آرایه بریزه یعنی وقتی یه آدرس یهش دادی اول فایلای اون رو
بعد فولدراش رو بعدش به ازای هر فولدر که پیدا کرد یه بار خودشو یا اون آدرس فراخوانی کنه.
کسی میتونه کمکم کنه خیلی گشتم ولی چیز بدرد بخوری پیدا نکردم

omidshaman
دوشنبه 21 مرداد 1392, 12:53 عصر
یک مقداریشو نوشتم بقیشو خودت بنویس...
البته اگر اشتباه نکنم dirent.h مخصوص ویندوزه

#include <iostream>
#include <dirent.h>
#include <vector>
using namespace std;

vector<string> saveDirectories(const char* loc)
{
DIR *dir=opendir (loc);
dirent *data;
vector<string> locs;
if (dir != NULL)
{
while ((data = readdir (dir)) != NULL)
{
locs.push_back(data->d_name);
}

closedir (dir);
//inja dobare baya farakhani beshe ...
}
return locs;

}
int main()
{
cout<<"Address: ";
string a;
getline(cin,a);
const char *loc=a.c_str();
vector<string>locs=saveDirectories(loc);
//show result
for(auto i : locs)
cout<<i<<endl;
}

Mt.Shadow
دوشنبه 21 مرداد 1392, 13:18 عصر
ممنون دوست عزیز به readdir و opendir گیر میده میگه تعریف نشدس !
چکارش کنم؟؟

omidshaman
دوشنبه 21 مرداد 1392, 13:35 عصر
ازچه کامپایلر و سیستم عاملی استفاده می کنی؟ MINGW که درست کار می کنه فکر کنم visual studio نداشته باشه این هدر رو ...
اگر برنامت مخصوصه ویندوزه می تونی از API های مخصوص اینکار استفاده کنی.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx
از boost (http://www.boost.org/) هم میتونی استفاده کنی !

Mt.Shadow
دوشنبه 21 مرداد 1392, 13:42 عصر
ازچه کامپایلر و سیستم عاملی استفاده می کنی؟ MINGW که درست کار می کنه فکر کنم visual studio نداشته باشه این هدر رو ...
اگر برنامت مخصوصه ویندوزه می تونی از API های مخصوص اینکار استفاده کنی.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx
از boost (http://www.boost.org/) هم میتونی استفاده کنی !

ویندوز 7 x64 ویژوال استدیو 2012
فعلا" تو ویندوز مورد نیازه ولی اگه میشد تو بک ترک هم ازش استفاده کنم خیلی خوب میشد !
تو CodeBlocks هم تست کردم کامپایل نمیشه !


||=== Test, Debug ===|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp||In function 'int main()':|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|34|war ning: 'auto' will change meaning in C++0x; please remove it|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|34|err or: expected initializer before ':' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected primary-expression before '}' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected ';' before '}' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected primary-expression before '}' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected ')' before '}' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected primary-expression before '}' token|
C:\Users\Shadow\Desktop\Win32\Test\main.cpp|36|err or: expected ';' before '}' token|
||=== Build finished: 7 errors, 1 warnings ===|

omidshaman
دوشنبه 21 مرداد 1392, 13:53 عصر
تو code blocks برو به Settings->compiler بعد تیک

Have g++ follow c++11 ...
رو بزن یا اصلا اون ۲ خط اخرو با این جایگزین کن

for(int i=0;i<locs.size();i++)
cout<<locs[i]<<endl;

Mt.Shadow
دوشنبه 21 مرداد 1392, 14:02 عصر
تو code blocks برو به Settings->compiler بعد تیک

رو بزن یا اصلا اون ۲ خط اخرو با این جایگزین کن

for(int i=0;i<locs.size();i++)
cout<<locs[i]<<endl;

الان مشکلش تو code blocks حل شد ولی من تو محیط ویژوال استدیوکار میکنم تو اون محیط چطوری حلش کنم ؟؟

omidshaman
دوشنبه 21 مرداد 1392, 14:13 عصر
یا باید از این جا dirent.h رو دانلود کنی
http://www.softagalleria.net/dirent.php
http://www.softagalleria.net/download/dirent/?C=M;O=D
داخلش هم example داره
یا این که از همون چیزایی که گفتم استفاده کنی win API یا boost حتی Qt هم فانکشن مخصوص این کار دارن

omidshaman
دوشنبه 21 مرداد 1392, 14:22 عصر
فایل dirent.h رو این جا کپی کن ( به جا D:\vStudio محلی که ویژوال استودیو خودت رو نصب کردی )

D:\vStudio\VC\include
کد بالا تو visual studio هدر string هم میخواد

brightening-eyes
سه شنبه 22 مرداد 1392, 14:57 عصر
چرا اصلا از MSVC استفاده میکنی؟
وقتی GCC همه چی داره!
میتونی توش با C++11 برنامه بنویسی و اصلا همه ی کتابخونه ها رو ساپورت میکنه
خوبیش اینه که رو خیلی از سیستم عاملا مثل windows, linux, macOSX و کلا تمام لینوکسا مثل Ubuntu هستش
حالا خود دانی

mehran901
پنج شنبه 24 مرداد 1392, 01:02 صبح
چرا اصلا از MSVC استفاده میکنی؟
وقتی GCC همه چی داره!
ی
من فک میکنم یکی از دلایل استفاده اکثریت از vs آی دی ای فوق العادش و البته یکپارچگی ای هست که در انجام پروژه های مختلف افراد باهاش روبرو میشن!! اینطور نیست ؟:|

Arashdn
جمعه 25 مرداد 1392, 09:03 صبح
من فک میکنم یکی از دلایل استفاده اکثریت از vs آی دی ای فوق العادش و البته یکپارچگی ای هست که در انجام پروژه های مختلف افراد باهاش روبرو میشن!! اینطور نیست ؟:|
من به خاطر امکانات فوق العاده ای که برای debug کردن داره ازش استفاده میکنم.

Mt.Shadow
جمعه 25 مرداد 1392, 10:58 صبح
من فک میکنم یکی از دلایل استفاده اکثریت از vs آی دی ای فوق العادش و البته یکپارچگی ای هست که در انجام پروژه های مختلف افراد باهاش روبرو میشن!! اینطور نیست ؟:|

دقیقا" همینه . . . واقعا" کدنویسی تو VS خیلی لذت بخشه

delta7
جمعه 25 مرداد 1392, 21:59 عصر
نسخه اکسپرسش هم بد نیست اون پولی نیست