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

نام تاپیک: حذف تمام عکس های یک پوشه در c

  1. #1

    حذف تمام عکس های یک پوشه در c

    با سلام!
    من میخوام در c یک برنامه نویسم که وقتی اجرا میشه همه عکس های یک پوشه رو پاک کنه البته باید بگم که مثلا در پوشه f1 یک پوشه f2 هم قرار داره و به همین ترتیب به پایین(پوشه های درون پوشه های دیگه) میخوام برنامه همه عکس های این پوشه رو پاک کنه یعنی برود درون پوشه های بگرده اگه عکسی هست پاک کنه ممنون میشم کمک کنید!

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    سلام. توی این تاپیک نحوه حذف یک فولدر توضیح داده شده. به صورت مشابه میتونید با کمی تغییر از همین روش برای حذف تصاویر استفاده کنید:
    https://barnamenevis.org/showthread.php?564736-%D8%AD%D8%B0%D9%81-%DB%8C%DA%A9-%D9%81%D9%88%D9%84%D8%AF%D8%B1-%D8%AF%D8%B1-c

  3. #3

    نقل قول: حذف تمام عکس های یک پوشه در c

    سلام من اون کد رو تست کردم اما همه ی فایل هارو پاک میکنه ولی من میخوام فقط عکس هارو پاک کنه!

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    همون طور که گفتم این کد برای حذف یک فولدر نوشته شده و برای تصویر باید تغییرش بدید و بگید که فایل هایی که پسوند تصویر دارن (مثل jpg، png و ...) فقط حذف بشه. برای کدی که شما میخواین فقط باید از دستور DeleteFileW استفاده بشه و نه RemoveDirectoryW. در متغیر cFileName هم اسم فایل ذخیره میشه که میتونید پسوند رو از این طریق کنترل کنید.

  5. #5

    نقل قول: حذف تمام عکس های یک پوشه در c

    من در قسمت cFileName, L"." رو به cFileName, L".mp4" تبدیل کردم اما باز همه ی فایل هارو پاک میکنه!

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    توی C با چنین روشی نمیشه استرینگ ها رو مقایسه کرد. برای بررسی این که پسوند فایل چیه از روشی که اینجا توضیح داده شده باید استفاده کنید:
    https://stackoverflow.com/questions/744766/how-to-compare-ends-of-strings-in-c

    این تغییرات رو هم انجام بدین:
    char به wchar_t
    strlen به wcslen
    strncmp به wcsncmp

  7. #7

    نقل قول: حذف تمام عکس های یک پوشه در c

    من این کد رو اضافه کردم
    int EndsWith(const wchar_t *str, const wchar_t *suffix){
    if (!str || !suffix)
    return 0;
    size_t lenstr = wcslen(str);
    size_t lensuffix = wcslen(suffix);
    if (lensuffix > lenstr)
    return 0;
    return wcsncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0;
    }


    int EndsWithFoo(const wchar_t *str) { return EndsWith(str, ".foo"); }


    و این ارورو داد

    main.cpp|65|error: cannot convert 'const char*' to 'const wchar_t*'|

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    کلمه "foo" یک استرینگ معمولیه و از نوع wide نیست و این ارور به این دلیله. حالا این به کنار، این قسمت صرفا یک مثاله و اصلا نباید توی کد تون باشه. این خط رو کامل حذف کنید:
    int EndsWithFoo(const wchar_t *str) { return EndsWith(str, ".foo"); }


    برای چک کردن پسوند (مثلا jpg) به این صورت عمل کنید:
    if ( EndsWith(find_data.cFileName, L".jpg") ){
    // delete file
    }

  9. #9

    نقل قول: حذف تمام عکس های یک پوشه در c

    من الان این کد رو دقیقا کجا قرار بدم؟(هر جا قرار دارم ارور داد!)

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

    نقل قول: حذف تمام عکس های یک پوشه در c

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

  11. #11

    نقل قول: حذف تمام عکس های یک پوشه در c

    باز کامپایل نشد اینم کدش
    #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){
    if ( EndsWith(find_data.cFileName, L".jpg") ){
    // delete file
    delete_folder(filefolder_path);
    }


    } else {
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not deleteq %S\n", filefolder_path);
    }


    free(filefolder_path);


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


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


    FindClose(handle);
    }



    اینم ارورش
    main.cpp|36|error: 'EndsWith' was not declared in this scope|

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    شما از تابع EndsWith استفاده کردین ولی هیچ جا تعریفش رو نذاشتین. تابع هم در جای اشتباهی گذاشته شده. در صورت برقرار بودن شرط باید دستور DeleteFileW اجرا بشه نه فراخوانی مجدد تابع. از RemoveDirectoryW هم نباید استفاده کنید چون فولدر که قرار نیست پاک بشه.
    آخرین ویرایش به وسیله sd702004 : سه شنبه 26 مرداد 1400 در 14:41 عصر

  13. #13

    نقل قول: حذف تمام عکس های یک پوشه در c

    با اون کد بالا هیچ فولدری پاک نمیشه!
    راجب تابع endswith هم باید بگم که من هنوز نمیدونم کجا کد فایل رو پاک میکنه که دستور شرط رو انجام بدم!

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    حذف فایل همون طور که از اسم تابع هم مشخصه توسط DeleteFileW انجام میشه. البته این مورد رو جلوتر تو همین تاپیک گفته بودم خدمت تون (پست چهارم):
    "برای کدی که شما میخواین فقط باید از دستور DeleteFileW استفاده بشه و نه RemoveDirectoryW"

  15. #15

    نقل قول: حذف تمام عکس های یک پوشه در c

    در کدی که قبلا فرستادم(در پست11) دستور deletefilew وجود ندارد ولی باز فایل هارو پاک میکنه!

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    خیر این طور نیست. در کد پست 11 در خط 50 از این تابع استفاده شده.

  17. #17

    نقل قول: حذف تمام عکس های یک پوشه در c

    من الان دستور چک برای حذف فایل که در خط 50 انجام میشه رو اینطور نوشتم
    if ( EndsWith(find_data.cFileName, L".jpg") ){                // delete file
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not deleteq %S\n", filefolder_path);
    }

    ولی باز ارور main.cpp|51|error: 'EndsWith' was not declared in this scope| رو میده

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    دلیلش اینه که تعریف تابع EndsWith (خط 1 تا 9 پست شماره 7) رو در کدتون قرار ندادین

  19. #19

    نقل قول: حذف تمام عکس های یک پوشه در c

    چطور تایع EndsWith در کدم تعریف کنم؟

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    به همون صورتی که تابع delete_folder تعریف شده. کافیه بدنه تابع رو در انتهای کد تون پیست کنید و قبل از تابع main هم این خط رو اضافه کنید:
    int EndsWith(const wchar_t *str, const wchar_t *suffix);

  21. #21

    نقل قول: حذف تمام عکس های یک پوشه در c

    باز این ارورو داد
    main.o:main.cpp|| undefined reference to `EndsWith(wchar_t const*, wchar_t const*)'|

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    کد رو کامل بذارید چون احتمالا یک چیزی رو جا انداختید.

  23. #23

    نقل قول: حذف تمام عکس های یک پوشه در c

    بفرمایید
    #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;
    }




    int EndsWith(const wchar_t *str, const wchar_t *suffix);
    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 file
    delete_folder(filefolder_path);






    } else {
    if ( EndsWith(find_data.cFileName, L".jpg") ){
    // delete file
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not deleteq %S\n", filefolder_path);
    }


    }




    free(filefolder_path);




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




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




    FindClose(handle);
    }



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

    نقل قول: حذف تمام عکس های یک پوشه در c

    خب علتش اینه که تعریف تابع EndsWith رو در هیچ جای کد تون قرار ندادین. دستور زیر رو به انتهای کد اضافه کنید (خارج از بلاک توابع دیگه):

    int EndsWith(const wchar_t *str, const wchar_t *suffix){
    if (!str || !suffix)
    return 0;
    size_t lenstr = wcslen(str);
    size_t lensuffix = wcslen(suffix);
    if (lensuffix > lenstr)
    return 0;
    return wcsncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0;
    }



    خط 21 هم بهتره قبل از تابع main قرار بگیره. کدهای خط 93 و 94 رو هم حذف کنید. تابع RemoveDirectoryW این جا کاربردی نداره چون هدف صرفا حذف فایله نه دایرکتوری.

  25. #25

    نقل قول: حذف تمام عکس های یک پوشه در c

    مننون اروری نداد حالا اگر بخوایم مثل چند پسوند رو پک کنه بهتره چند تا دستور if بنویسیم یا میشه گفت چندتا رو خوش چک کنه؟

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    خواهش میکنم. نه نیازی به چند تا if نیست. کافیه یه آرایه تعریف کنید و پسوندهای مورد نظر تون رو داخلش قرار بدین. بعنوان مثال میشه داخل بدنه تابع delete_folder در ابتدا این آرایه رو تعریف کرد:
    static const wchar_t *extensions[] = { L".jpg", L".png", L".tif", L".gif", L".bmp" };
    static const int ex_size = (int)sizeof(extensions)/sizeof(extensions[0]);


    این قسمت از کد رو هم حذف کنید کنید:
        if ( EndsWith(find_data.cFileName, L".jpg") ){
    // delete file
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not deleteq %S\n", filefolder_path);
    }


    و به جاش با این کد جایگزین کنید:
    for (int i=0; i<ex_size; ++i){
    if ( EndsWith(find_data.cFileName, extensions[i]) ){
    if (!DeleteFileW(filefolder_path))
    fprintf(stderr, "could not delete %S\n", filefolder_path);

    break;
    }
    }

  27. #27

    نقل قول: حذف تمام عکس های یک پوشه در c

    این کد فولدر های فارسی هم میگرده و همینطور هیدن شده و همینطور فایل های فارسی؟

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    بله. به دلیل استفاده از wchar_t به جای char مشکلی از بابت فایل و فولدرهای فارسی وجود نداره. در خصوص فایل های hidden خودم تست نکردم ولی فکر نمیکنم مشکلی وجود داشته باشه.

  29. #29

    نقل قول: حذف تمام عکس های یک پوشه در c

    اگه بخوایم به جای پاک عملیات کات رو انجام بده باید چکار کرد؟

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

    نقل قول: حذف تمام عکس های یک پوشه در c

    با این تابع میتونید فایل ها رو move کنید:
    https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-movefilew

تاپیک های مشابه

  1. پاسخ: 7
    آخرین پست: یک شنبه 08 تیر 1393, 04:41 صبح
  2. پاسخ: 2
    آخرین پست: دوشنبه 26 فروردین 1392, 14:10 عصر
  3. پاسخ: 0
    آخرین پست: چهارشنبه 15 آذر 1391, 16:21 عصر
  4. حرفه ای: جستجوی فایل در تمام پوشه ها و زیر پوشه ها (فولدر دارای حرف ی فارسی )
    نوشته شده توسط shinyboy در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: چهارشنبه 01 آذر 1391, 18:03 عصر
  5. پاسخ: 15
    آخرین پست: چهارشنبه 20 اردیبهشت 1391, 08:32 صبح

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

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

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