نمایش نتایج 1 تا 16 از 16

نام تاپیک: حذف یک فولدر در c

  1. #1

    Post حذف یک فولدر در c

    با سلام!
    دوستان من میخوام کد بنویسم که وقتی کاربر اونو باز میکنه یک فولدر در مکان خاص پاک بشه خواهشا دوستانی که بلدن راهنمایی کنند!

  2. #2
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    سلام. روش این کار به سیستم عامل بستگی داره. اینجا برای لینوکس و ویندوز توضیح داده: (توجه داشته باشید که یوزری که برنامه شما رو اجرا میکنه باید دسترسی برای حذف اون فولدر خاص و محتویات داخلش رو داشته باشه)
    https://stackoverflow.com/questions/2256945/removing-a-non-empty-directory-programmatically-in-c-or-c

  3. #3

    نقل قول: حذف یک فولدر در c

    با سلام!
    مثلا در ویندوز، به محض اینکه فایل باز شد یک پوشه رو پاک کنه!

  4. #4
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    در ویندوز تابعی به نام RemoveDirectory با دو عنوان RemoveDirectoryA و RemoveDirectoryW (اولی فقط ANSI و دومی Unicode) وجود داره که یک فولدر خالی رو حذف میکنه. بنابراین برای این که یک فولدر رو حذف کنیم ابتدا لازمه محتویات داخلش رو حذف کنیم که محتویات داخل اون ممکنه فایل و یا فولدرهای دارای فایل باشه. بنابراین اولین کاری که باید انجام بشه باز کردن فایلهای داخل یک فولدر با دستور FindFirstFile و سپس رفتن به داخل فایلها و فولدرهای بعدی با دستور FindNextFile هست. هر جا به فایلی رسیدیم با دستور DeleteFile اون فایل رو حذف میکنید و هر جا به فولدر رسیدین ابتدا وارد اون فولدر میشید و فایلهاش رو حذف میکنید و سپس با دستور RemoveDirectory اون فولدر رو حذف میکنید. یک روش پیاده سازی ساده هم اینه که بصورت recursive کدتون رو بنویسید.
    این توابع در هدر Windows.h قرار داره. روش های دیگری هم در API ویندوز برای حذف یک فولدر امکان پذیره.

  5. #5

    نقل قول: حذف یک فولدر در c

    با سلام!
    میشه کد حذفش رو بنویسید که چجوری وارد پوشه ای بشم و محتویاتش رو پاک کنم!

  6. #6
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    این کد تمام فایلها و فولدرها رو به همون ترتیبی که باید حذف بشه نمایش میده و چیزی رو حذف نمیکنه. یه بررسی بکنید کلیاتش دست تون میاد. برای حذف هم کافیه هر جا فولدر بود از تابع RemoveDirectoryW و هر جا فایل داشتین از تابع DeleteFileW استفاده کنید. علت استفاده از wide char هم به این خاطر بود که اگه فایل/فولدر فارسی هم داشتین توی حذفش مشکلی پیش نیاد. (یک روش تک خطی هم وجود داره و اون استفاده از دستورات cmd داخل تابع system هست ولی خب روش اصولیش همین روش زیره)

    در این مثال محتویات داخل فولدر فرضی test واقع در درایو d بصورت recursive نمایش داده میشه (دقت کنید که در انتهای استرینگ نباید کارکتر اسلش یا بک اسلش وجود داشته باشه)
    #include <Windows.h>
    #include <stdio.h>
    #include <wchar.h>
    #include <stdlib.h>

    void delete_folder(const wchar_t *path);

    int main(void){
    delete_folder(L"d:/test");
    return 0;
    }

    void delete_folder(const wchar_t *path){
    int sz = wcslen(path) + 3;
    wchar_t *search_path = (wchar_t *)malloc(sz * sizeof(wchar_t));
    swprintf(search_path, sz, L"%S/*", path);

    WIN32_FIND_DATAW find_data;
    HANDLE handle = FindFirstFileW(search_path, &find_data);
    free(search_path);

    if (handle == INVALID_HANDLE_VALUE){
    fprintf(stderr, "finding %S failed\n", path);
    return;
    }

    do {
    if ( wcscmp(find_data.cFileName, L".") == 0 || wcscmp(find_data.cFileName, L"..") == 0 )
    continue;

    if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
    int sz = wcslen(path) + wcslen(find_data.cFileName) + 2;
    wchar_t *subfolder_path = (wchar_t *)malloc(sz * sizeof(wchar_t));
    swprintf(subfolder_path, sz, L"%S/%S", path, find_data.cFileName);
    delete_folder(subfolder_path);
    free(subfolder_path);
    } else {
    wprintf(L"file: %S/%S\n", path, find_data.cFileName);
    }

    } while (FindNextFileW(handle, &find_data));

    wprintf(L"folder: %S\n", path);
    FindClose(handle);
    }
    آخرین ویرایش به وسیله sd702004 : چهارشنبه 13 اسفند 1399 در 20:52 عصر

  7. #7

    نقل قول: حذف یک فولدر در c

    با سلام!
    الان کد بالا هر چیزی که توی اون پوشه است را پاک میکنه!

  8. #8
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    خیر. همون طور که گفتم این کد فایل و فولدرها رو به ترتیبی که باید پاک بشن بر اساس مسیر کامل شون لیست میکنه و صرفا کافیه برای پاک کردن شون از توابع زیر استفاده کنید. هر جا توی کد wprintf وجود داره از توابع زیر برای حذف فولدر یا فایل استفاده کنید.

    https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-removedirectoryw
    https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-deletefilew

  9. #9

    نقل قول: حذف یک فولدر در c

    با سلام!
    یعنی اون دوجایی که wprintf امده این دستورو بنویسم
    BOOL RemoveDirectoryW( LPCWSTR lpPathName);

  10. #10
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    جایی که فولدر دارین از این تابع و جایی که فایل دارین از تابع DeleteFileW باید استفاده بشه. ورودی این دو تابع هم یه استریگ wide ـه. کد رو تغییر دادم. این کد فولدر فرضی test واقع در درایو d رو به طور کامل پاک میکنه (مشروط بر اینکه یوزری که این فایل رو اجرا میکنه دسترسی برای حذف فولدر توی اون مسیر خاص رو داشته باشه).

    #include <Windows.h>
    #include <stdio.h>
    #include <wchar.h>
    #include <stdlib.h>

    void delete_folder(const wchar_t *path);

    int main(void){
    delete_folder(L"D:/test");
    return 0;
    }

    void delete_folder(const wchar_t *path){
    int sz = wcslen(path) + 3;
    wchar_t *search_path = (wchar_t *)malloc(sz * sizeof(wchar_t));
    swprintf(search_path, sz, L"%S/*", path);

    WIN32_FIND_DATAW find_data;
    HANDLE handle = FindFirstFileW(search_path, &find_data);
    free(search_path);

    if (handle == INVALID_HANDLE_VALUE){
    fprintf(stderr, "finding %S failed\n", path);
    return;
    }

    do {
    if ( wcscmp(find_data.cFileName, L".") == 0 || wcscmp(find_data.cFileName, L"..") == 0 )
    continue;

    int sz = wcslen(path) + wcslen(find_data.cFileName) + 2;
    wchar_t *filefolder_path = (wchar_t *)malloc(sz * sizeof(wchar_t));
    swprintf(filefolder_path, sz, L"%S/%S", path, find_data.cFileName);

    if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
    delete_folder(filefolder_path);
    } else {
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not delete %S\n", filefolder_path);
    }

    free(filefolder_path);

    } while (FindNextFileW(handle, &find_data));

    if (!RemoveDirectoryW(path))
    fprintf(stderr, "could not delete %S\n", path);

    FindClose(handle);
    }


  11. #11

    نقل قول: حذف یک فولدر در c

    با سلام!
    این کد در درایو c هم جواب میده؟

  12. #12
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    با سلام. اگه فولدرهایی که نیاز به دسترسی خاص دارن (مثل program files و ...) منظورتونه امکان پذیر نیست چون خود سیستم عامل اجازه نمیده و تنها در صورتی که برنامه بصورت administrator اجرا شده باشه این کار امکان پذیره

  13. #13

    نقل قول: حذف یک فولدر در c

    با سلام!
    میشه کاری کرد که فقط رو
    administrator اجرا بشه؟

  14. #14
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    اگه منظورتون اینه که فایل بصورت پیشفرض در حالت ادمینستریتور اجرا بشه، در صورتی که به سیستمی که مد نظرتون هست دسترسی دارید بله میشه. کافیه توی سیستم مد نظر روی فایل exe کلیک راست کنید و حالتش رو run as administrator بذارید در غیر این صورت سیستم عامل دسترسی برای چنین کاری رو نمیده چرا که امنیت سیستم به خطر میفته.

    امیدوارم از حرفم برداشت اشتباه نشه اما با این روش به هیچ وجه، حذف فایلهای مهم سیستم عامل امکان پذیر نیست.

  15. #15

    نقل قول: حذف یک فولدر در c

    با سلام!
    خود برنامه های یه فایل دارن با نام 000.bat اون اگه اجرا بشه برنامه پاک میشه؟

  16. #16
    کاربر تازه وارد آواتار sd702004
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    مشهد
    پست
    90

    نقل قول: حذف یک فولدر در c

    باید دید محتوای اون فایل bat چیه. اگه دستورات حذف داخلش نوشته شده بله این کار قابل انجامه (مشروط بر اینکه یوزر دسترسی برای حذف داشته باشه). در حالت کلی برای حذف فایل و فولدر چه از طریق یک فایل exe چه از طریق batch file، یوزری که فایل رو اجرا میکنه باید دسترسی برای حذف اون فولدر رو داشته باشه در غیر این صورت این کار ممکن نیست و سیستم عامل اجازه حذف نمیده

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •