gpt4 book ai didi

c - 如何在 Windows 上删除 c 中的 .zip 文件? (错误: Directory not empty)

转载 作者:行者123 更新时间:2023-11-30 16:02:45 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

#include "win32-dirent.h"
#include <windows.h>
#include <io.h>
#include <direct.h>

#define MAXFILEPATH 1024

bool IsDirectory(char* path)
{
WIN32_FIND_DATA w32fd;
HANDLE hFindFile;

hFindFile = FindFirstFile((PTCHAR)path, &w32fd);

if(hFindFile == INVALID_HANDLE_VALUE)
{
return false;
}
return w32fd.dwFileAttributes & (FILE_ATTRIBUTE_DIRECTORY);
}

int RD(const char* folderName)
{
DIR *dir;
struct dirent *ent;

dir = opendir(folderName);
if(dir != NULL)
{
while((ent = readdir(dir)) != NULL)
{
if(strcmp(ent->d_name , ".") == 0 ||
strcmp(ent->d_name, "..") == 0)
{
continue;
}

char fileName[MAXFILEPATH];
sprintf(fileName,"%s%c%s", folderName, '\\', ent->d_name);
if(IsDirectory(fileName))
{
RD(fileName);
}
else
{
unlink(fileName);
}
}

closedir(dir);

//chmod(folderName, S_IWRITE | S_IREAD);
if(_rmdir(folderName) != 0)perror(folderName);

}
else
{
printf("%s <%s>\n","Could Not Open Directory.", folderName);
return -1;
}

return 0;
}

int main(int argc, char* argv[])
{
if(argc < 2)
{
printf("usage: ./a.out <target folder name>\n");
return 1;
}

//RD(argv[1]);
//_mkdir("12");
//_mkdir("12\\34");
//_rmdir("12\\34");
//_rmdir("12");
char buf[0xff];
sprintf(buf, "unzip -x -q -d 1234 1234.zip");
system(buf);

RD("1234");

//unlink("D:\\dev\\c\\project\\removeFolder\\Debug\\1234\\56\\5.txt");
//unlink("D:\\dev\\c\\project\\removeFolder\\Debug\\1234\\56\\6.txt");
//unlink("D:\\dev\\c\\project\\removeFolder\\Debug\\1234\\1_23.zip");
//unlink("D:\\dev\\c\\project\\removeFolder\\Debug\\1234\\4.txt");
//_rmdir("D:\\dev\\c\\project\\removeFolder\\Debug\\1234\\56");
//_rmdir("D:\\dev\\c\\project\\removeFolder\\Debug\\1234");

return 0;
}

输出是:

--------------------------
Archive: 1234.zip
inflating: 1234/4.txt
inflating: 1234/56/5.txt
inflating: 1234/56/6.txt
inflating: 1234/1_23.zip
--------------------------

最佳答案

乍一看,您的代码看起来可行,您在尝试删除目录之前递归地清理目录。

我立即想到一件事,您可能在另一个应用程序中打开了 zip 文件,因此可能被锁定。

您通常不会收到“目录不为空”错误,除非目录不为空。

首先,更改行:

if(_rmdir(folderName) != 0)perror(folderName);

至:

if(_rmdir(folderName) != 0) {
char buf[1000];
sprintf(buf,"dir \"%s\"",foldername);
system(buf);
perror(folderName);
}

这应该可以告诉您您所在的目录以及有问题的文件是什么。

关于c - 如何在 Windows 上删除 c 中的 .zip 文件? (错误: Directory not empty),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com