c语言删除文件夹
❶ 写个批处理删除指定文件或指定文件夹
@EchoOff
For/f"tokens=*"%%iin('dir/a-d/b/s"C:ProgramFiles*.123"')do(
Echo%%i
Del/q/s/a/f"%%i"
)
Pause
(1)c语言删除文件夹扩展阅读:
1、批处理代码需要注意的事项:
批处理中的变量是不区分类型的,不需要像C语言中的变量那样还要区分int、float、char等。
比如执行setaa=345后,变量aa的值既可以被视为数字345,也可以被视为字符串345。
2、文件夹管理命令释义:
cd显示当前目录名或改变当前目录。
md创建目录。
rd删除一个目录。
dir显示目录中的文件和子目录列表。
tree以图形显示驱动器或路径的文件夹结构。
path为可执行文件显示或设置一个搜索路径。
复制文件和目录树。
3、文件管理命令释义:
type显示文本文件的内容。
将一份或多份文件复制到另一个位置。
del删除一个或数个文件。
move移动文件并重命名文件和目录。
ren重命名文件。
replace替换文件。
attrib显示或更改文件属性。
find搜索字符串。
fc比较两个文件或两个文件集并显示它们之间的不同
❷ MFC CFileFind和CFile遍历一个指定文件夹并删除里面的所有文件(里面没有下层文件夹目录)问题
首先鄙视一下楼主的代码 毫无章法 乱定义变量 居然还不按同一风格定义
其次 你写的这玩意 我不知道 你是想学习字符转换呢 还是 想遍历文件
最后我想说的是 他们说的都没找到本质问题上去
把这句话
pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();
改为 下面2句
CString str = finder.GetFilePath();
pFile = (LPSTR)(LPCTSTR) str;
你的程序就没问题了
下面看偶的分析
第一
char* pFile;
TCHAR* p;
你让 p = pFile ; 居然没出问题 说明 你的char 和 TCHAR 是一样的玩意 你多半用的是VC6开发
要么就是自己设置了工程属性为 多字节的, 所以根本不存在什么 字符集的转换
什么 UNICODE ANSI 多字节都是瞎扯
第二
断点tiao'shi
pFile = (LPSTR)(LPCTSTR)finder.GetFilePath();
执行后 pFile 指向的是乱码 所以你再往后运行肯定就会出错了
仔细看一下 finder.GetFilePath() 返回的是一个CString;
莫非楼主的 从CString 转换 为 char * 的方式错误了?
测试
CString str("123");
pFile = (LPSTR)(LPCTSTR) str;
完全没有问题啊...
所以问题 归根到底 在与 返回值是 CString 会导致很多 bug的哦
这如果要说起来就太多了... 楼主再找度娘吧
//-- 下面的写法稍微规范点 我就不懂 你定义 TCHAR 为了什么
int main()
{
CFileFind finder;
CString path("D:\\1\\Cache\\");
CString file;
BOOL has = finder.FindFile(path+"*.*");
while(has)
{
has = finder.FindNextFile();
//IsDots 就是的 . 和 .. 如果你不判断是文件夹 它会把当成文件去删除,结果去删除不掉
//在Windows系统下 文件和文件夹被看作同样的东西
if( !finder.IsDots() && !finder.IsDirectory() )
{
file= finder.GetFilePath();
//CFile::Remove(file); 你这函数都没有返回值 你好意思直接就在下面显示删除成功
if (DeleteFile(file))
{
cout<<file<<" 删除成功"<<endl;
}
else
{
cout<<file<<" 删除失败, 非共享的文件是否正在使用?"<<endl;
}
}
}
finder.Close(); //----
return 0;
}