怎样通过  TDirectoryBox 删除文件夹 来者有分,在线等待回答

时间:2022-06-18 21:36:08
我用的是win 3.1 的组件,我想通过 TDirectoryBox 删除选中的文件夹,但是用
RemoveDir 要用全路径,而我想删除的又是只处于选中而没有打开,怎么办???希望各位高人指点!!!!!

8 个解决方案

#1


removedir好像只能删除空文件夹

#2


那用别的方法好了

#3


you can use rmdir(char*path);

#4


转一个贴
删除目录及目录下所有文件与子目录



函数原型:BOOL DeleteDirectory(char *DirName);
返回值:成功删除时返回TRUE,否则返回FALSE
参数DirName为要删除的目录名,必须为绝对路径名,如“c:\\temp"。

函数定义如下:
BOOL DeleteDirectory(char *DirName)
{
  CFileFind tempFind;
  char tempFileFind[200];
  sprintf(tempFileFind,"%s\\*.*",DirName);
  BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
  while(IsFinded)
  {
   IsFinded=(BOOL)tempFind.FindNextFile();
   if(!tempFind.IsDots())
   {
     char foundFileName[200];
     strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
     if(tempFind.IsDirectory())
     {
      char tempDir[200];
      sprintf(tempDir,"%s\\%s",DirName,foundFileName);
      DeleteDirectory(tempDir);
     }
     else
     {
      char tempFileName[200];
      sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
      DeleteFile(tempFileName);
     }
   }
  }
  tempFind.Close();
  if(!RemovwDirctory(DirName))
  {
   MessageBox(0,"删除目录失败!","警告信息",MK_OK);
   return FALSE;
  }
  return TRUE;
}

#5


or DeleteDirectory(CString Path);
The name of the function may not be right,you should chech it in the help document!

#6


我使用的方法
//该函数删除一个非空的目录DirName
bool DeleteDirectory(AnsiString DirName)
{
  SHFILEOPSTRUCT filestruct;
  memset(&filestruct,0,sizeof(filestruct)); //将该结构缓冲区用0填充
  filestruct.hwnd=NULL;
  filestruct.wFunc=FO_DELETE;//执行删除
  filestruct.pFrom=DirName.c_str();
  filestruct.pTo=NULL;
  filestruct.fFlags=FOF_NOCONFIRMATION+FOF_SILENT;
  filestruct.hNameMappings=NULL;
  if(SHFileOperation(&filestruct)==0)
     return true;
  else
     return false;
}
另外你可以先删除一个目录下的所有文件,然后再删除该目录,
删除所有文件的方法如下
bool deldir(char * dir_fullpath) // 删除指定的目录
{
char dir[260];
char filename[260];
int len = 0;
int ch = '\\';

strcpy(dir, dir_fullpath);

len = strlen(dir);

char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能为磁盘根目录或者不是有效的目录路径
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目录后添加'\'
strcat(dir, "\\");
}

GetCurrentDirectory(260, filename);
strcat(filename, "\\");
if(strcmp(dir, filename) == 0) // 如果要删除的目录是当前目录
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改变当前目录
}

WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;

strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;

if(fFile!=INVALID_HANDLE_VALUE) // 此目录不是空目录
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 删除找到的子目录
strcat(filename, "\\");
flag = flag && deldir(filename);
}
else
{ // 删除找到的文件
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}

#7


是吗,还有别的更简练的方法吗,只要能删空目录就行

#8


好了,我的问题解决了,谢谢各位了!!!!!

#1


removedir好像只能删除空文件夹

#2


那用别的方法好了

#3


you can use rmdir(char*path);

#4


转一个贴
删除目录及目录下所有文件与子目录



函数原型:BOOL DeleteDirectory(char *DirName);
返回值:成功删除时返回TRUE,否则返回FALSE
参数DirName为要删除的目录名,必须为绝对路径名,如“c:\\temp"。

函数定义如下:
BOOL DeleteDirectory(char *DirName)
{
  CFileFind tempFind;
  char tempFileFind[200];
  sprintf(tempFileFind,"%s\\*.*",DirName);
  BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
  while(IsFinded)
  {
   IsFinded=(BOOL)tempFind.FindNextFile();
   if(!tempFind.IsDots())
   {
     char foundFileName[200];
     strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
     if(tempFind.IsDirectory())
     {
      char tempDir[200];
      sprintf(tempDir,"%s\\%s",DirName,foundFileName);
      DeleteDirectory(tempDir);
     }
     else
     {
      char tempFileName[200];
      sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
      DeleteFile(tempFileName);
     }
   }
  }
  tempFind.Close();
  if(!RemovwDirctory(DirName))
  {
   MessageBox(0,"删除目录失败!","警告信息",MK_OK);
   return FALSE;
  }
  return TRUE;
}

#5


or DeleteDirectory(CString Path);
The name of the function may not be right,you should chech it in the help document!

#6


我使用的方法
//该函数删除一个非空的目录DirName
bool DeleteDirectory(AnsiString DirName)
{
  SHFILEOPSTRUCT filestruct;
  memset(&filestruct,0,sizeof(filestruct)); //将该结构缓冲区用0填充
  filestruct.hwnd=NULL;
  filestruct.wFunc=FO_DELETE;//执行删除
  filestruct.pFrom=DirName.c_str();
  filestruct.pTo=NULL;
  filestruct.fFlags=FOF_NOCONFIRMATION+FOF_SILENT;
  filestruct.hNameMappings=NULL;
  if(SHFileOperation(&filestruct)==0)
     return true;
  else
     return false;
}
另外你可以先删除一个目录下的所有文件,然后再删除该目录,
删除所有文件的方法如下
bool deldir(char * dir_fullpath) // 删除指定的目录
{
char dir[260];
char filename[260];
int len = 0;
int ch = '\\';

strcpy(dir, dir_fullpath);

len = strlen(dir);

char *temp = strrchr(dir, ch);
if(len < 4 || temp == NULL) // 可能为磁盘根目录或者不是有效的目录路径
return false;
if(temp != NULL)
{
if((temp - dir + 1) != len) // 在目录后添加'\'
strcat(dir, "\\");
}

GetCurrentDirectory(260, filename);
strcat(filename, "\\");
if(strcmp(dir, filename) == 0) // 如果要删除的目录是当前目录
{
strcat(filename, "..");
SetCurrentDirectory(filename); // 改变当前目录
}

WIN32_FIND_DATA finddata;
HANDLE fFile;
bool flag;

strcpy(filename, dir);
strcat(filename, "*.*");
fFile=FindFirstFile(filename, &finddata);
flag=true;

if(fFile!=INVALID_HANDLE_VALUE) // 此目录不是空目录
{
BOOL bfind = true;
while(bfind)
{
if(finddata.cFileName[0] != '.')
{
strcpy(filename, dir);
strcat(filename, finddata.cFileName);
if(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // 删除找到的子目录
strcat(filename, "\\");
flag = flag && deldir(filename);
}
else
{ // 删除找到的文件
SetFileAttributes(filename, FILE_ATTRIBUTE_NORMAL);
flag = flag && DeleteFile(filename);
}
}
bfind = FindNextFile(fFile, &finddata);
}
FindClose(fFile);
}
if(flag)
{
SetFileAttributes(dir_fullpath, FILE_ATTRIBUTE_NORMAL);
if(RemoveDirectory(dir_fullpath))
return true;
}
return false;
}

#7


是吗,还有别的更简练的方法吗,只要能删空目录就行

#8


好了,我的问题解决了,谢谢各位了!!!!!