پاک کردن و تغییر نام فولدر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

پاک کردن و تغییر نام فولدر

0 امتیاز
سلام

میخواستم برای پاک کردن و تغییر نام فولدر کمکم کنید

ممنون.
سوال شده دی 18, 1392  بوسیله ی Azar (امتیاز 628)   29 43 61
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

3 پاسخ

+1 امتیاز
 
بهترین پاسخ

برای پاک کردن یه پوشه ای که دارای فایل هست (خالی نیست) باید از توابع بازگشتی ( Recursive ) استفاده کنید .

نمونه کد از http://stackoverflow.com/questions/734717/how-to-delete-a-folder-in-c

#include <windows.h>
#include <conio.h>


int DeleteDirectory(const std::string &refcstrRootDirectory,
                    bool              bDeleteSubdirectories = true)
{
  bool            bSubdirectory = false;       // Flag, indicating whether
                                               // subdirectories have been found
  HANDLE          hFile;                       // Handle to directory
  std::string     strFilePath;                 // Filepath
  std::string     strPattern;                  // Pattern
  WIN32_FIND_DATA FileInformation;             // File information


  strPattern = refcstrRootDirectory + "\\*.*";
  hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
  if(hFile != INVALID_HANDLE_VALUE)
  {
    do
    {
      if(FileInformation.cFileName[0] != '.')
      {
        strFilePath.erase();
        strFilePath = refcstrRootDirectory + "\\" + FileInformation.cFileName;

        if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
          if(bDeleteSubdirectories)
          {
            // Delete subdirectory
            int iRC = DeleteDirectory(strFilePath, bDeleteSubdirectories);
            if(iRC)
              return iRC;
          }
          else
            bSubdirectory = true;
        }
        else
        {
          // Set file attributes
          if(::SetFileAttributes(strFilePath.c_str(),
                                 FILE_ATTRIBUTE_NORMAL) == FALSE)
            return ::GetLastError();

          // Delete file
          if(::DeleteFile(strFilePath.c_str()) == FALSE)
            return ::GetLastError();
        }
      }
    } while(::FindNextFile(hFile, &FileInformation) == TRUE);

    // Close handle
    ::FindClose(hFile);

    DWORD dwError = ::GetLastError();
    if(dwError != ERROR_NO_MORE_FILES)
      return dwError;
    else
    {
      if(!bSubdirectory)
      {
        // Set directory attributes
        if(::SetFileAttributes(refcstrRootDirectory.c_str(),
                               FILE_ATTRIBUTE_NORMAL) == FALSE)
          return ::GetLastError();

        // Delete directory
        if(::RemoveDirectory(refcstrRootDirectory.c_str()) == FALSE)
          return ::GetLastError();
      }
    }
  }

  return 0;
}


int main()
{
  int         iRC                  = 0;
  std::string strDirectoryToDelete = "c:\\mydir";


  // Delete 'c:\mydir' without deleting the subdirectories
  iRC = DeleteDirectory(strDirectoryToDelete, false);
  if(iRC)
  {
    std::cout << "Error " << iRC << std::endl;
    return -1;
  }

  // Delete 'c:\mydir' and its subdirectories
  iRC = DeleteDirectory(strDirectoryToDelete);
  if(iRC)
  {
    std::cout << "Error " << iRC << std::endl;
    return -1;
  }

  // Wait for keystroke
  _getch();

  return 0;
}

 

پاسخ داده شده دی 19, 1392 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد دی 21, 1392 بوسیله ی BlueBlade
میشه این کد را یه کم توضیح بدین ؟؟؟
اخه remove کلا کار نمیکنه نه فقط برای فولدر های پر
کجاشو توضیح بدم ؟
همشا توضیح بدید ..
شیوه کارش اینجوریه که با()   FindFirstFile و () FindNextFile آمار همه فایل های توی پوشه ی داده شده رو میگیره .
همه ی فایل هاشو رو با () DeleteFile پاک میکنه .
اگر تو آمار گرفته شده پوشه ای هم وجود داشت این تابع خودش رو صدا میزنه و مسیر پوشه ی جدید رو بهش میده و تا همه ی اینکار ها رو پوشه های دیگه هم انجام بشه . ( توابع  بازگشتی )
تا زمانی که توی پوشه ها دیگه هیچ فایلی وجود نداشته باشه .
و اون موقع با () RemoveDirectory پوشه های خالی رو پاک میکنه .
+1 امتیاز
rename("C:\\folder","C:\\folder2");
remove("C:\\folder");

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

	std::string command;
	command +="rmdir ";
	command += "\"C:\\folder\"";
	system(command.c_str());

 

از API ویندوز و Boost  و Qt و .... هم میشه استفاده کرد

پاسخ داده شده دی 18, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
rename & remove برای فایل و فولدر هر دو استفاده میشه ؟
آره واسه هر 2 تا استفاده میشه .
برای من remove کار نمیکنه
اشکالش کجاست ؟
remove فولدر پر را هم پاک میکنه ؟
برای منم تو ویژوال استودیو کار نمی کنه  . و نه فولدر پر رو پاک نمی کنه .
برای پاک کردن فولدر پر اول باید لیست فایلای داخل فولدر رو در بیاری دونه دونه پاکشون کنی نهایتا برگردی فولدر رو پاک کنی .
پس چیکار کنم ؟
شما فقط توی نوع دوم گفتین که داخل فولدر باید خالی باشه ..
0 امتیاز

پیدا کردم

در این حالت ازتون سوال میکنه که میخواین فولدر را پاک کنید یا نه ؟ و بعد پاک میکنه

system("rmdir /S c:\\deadman");

در این حالت بدون سوال کردن از کاربر پاک میکنه

system("rmdir /S /Q c:\\deadman");

...

فولدر های پر راهم پاک میکنه

پاسخ داده شده دی 19, 1392 بوسیله ی Azar (امتیاز 628)   29 43 61
ولی کاراییش پایینتره .
اگر فایل rmdir هم بدلیلی توی system32 نباشه اونوقت نمیتونی فایل ها رو پاک کنی .
این کدی که گذاشتم اینجا رو اگر درک کنی تو جاهای دیگه بکارت میاد.
...