导航
  • 主页
  • VC/MVC基础类
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC/MFC&Web
  • MFC Plus
  • VC++技术资源

VC中如何重命名文件夹?文件夹下还有文件...

tengyisong 2009-08-13 10:40:55
MFC问题:
现在知道某一文件的路径,然后想将包含这一文件的所有的文件夹的名字中含某一字符串的替换掉,也就相当于对含这一字符串的文件夹进行重命名,该如何做呢?
比如现有D:\test\temp目录下有一文件tep.c(与temp文件夹同一级别的文件夹还有可能有好多),现在想把test文件夹所包含的“文件内容中”或是“文件的名字中”或是“文件夹的名字中”只要出现te的就替换成TEMP,大概思路就是想这样的,现在我已经实现了文件内容中可以替换了,以及文件名中出现要替换的词也可以替换成功了,但是现在不知道怎样替换文件夹名字(即文件夹重命名,而不影响其目录下的内容)...
请高手赐教,由于敝人分数很少,所以只能给10分了~
...全文
3496 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
隽永Jasen 2010-07-24
楼主的问题是多层目录的重命名问题,可以写一个算法,逐层进行重命名,用一个循环就可以实现。
可以对原目录下的所有子目录用ReNameFolder或MoveFile进行重命名,然后对目录字符串进行解析,删除一个\后的字符,就得到上级目录,然后对此目录下的所有目录进行重命名,依次类推,直到碰到冒号。
回复
「已注销」 2009-10-31
CFile::Rename
回复
GMingZ 2009-08-14
已经有两种方法出现了,而且肯定能实现,楼主怎么还不结贴给分了??????
回复
tengyisong 2009-08-14
[Quote=引用 2 楼 tttyd 的回复:]
C/C++ code///////////////////////////////////////ReNameFolder//参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径//作用:修改原文件夹的名字。///////////////////////////////////////BOOL ReNameFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{int nLengthFrm= strlen(lpszFromPath);char*NewPathFrm=newchar[nLengthFrm+2];
strcpy(NewPathFrm,lpszFromPath);
NewPathFrm[nLengthFrm]='\0';
NewPathFrm[nLengthFrm+1]='\0';

SHFILEOPSTRUCT FileOp;
ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));

FileOp.fFlags= FOF_NOCONFIRMATION ;
FileOp.hNameMappings= NULL;
FileOp.hwnd= NULL;
FileOp.lpszProgressTitle= NULL;
FileOp.pFrom= NewPathFrm;
FileOp.pTo= lpszToPath;
FileOp.wFunc= FO_RENAME;return SHFileOperation(&FileOp)==0;
}
[/Quote]这样就可以了吗?能否解释下啊?我觉得还是不太明白,因为比如说原来的路径为D:\test\temp,要将含te的替换为TEMP的话,是不是先用Oldpath.Replace(te,TEMP),这样得到了你说的lpszToPath,然后执行你的上述代码后就实现了文件夹重命名吗?test文件夹和temp文件夹都能命名为相应的TEMPst和TEMPmp,而使得他们各自目录下的文件都保持不变吗?
回复
这不是鸭头 2009-08-14
[Quote=引用 2 楼 tttyd 的回复:]
C/C++ code///////////////////////////////////////ReNameFolder//参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径//作用:修改原文件夹的名字。///////////////////////////////////////BOOL ReNameFolder(LPCTSTR lpszFromPath,LP¡­
[/Quote]
呵呵.这段代码是我写....
贴在了我的空间里的
回复
tengyisong 2009-08-14
[Quote=引用 4 楼 sb3day 的回复:]
MoveFile也可以
[/Quote]MoveFile如何实现呢?我看了下资料,应该是移动文件夹吧?重命名的话也有人问过,可是都没有说出用MoveFile实现的思路~
回复
sb3day 2009-08-14
你不是要重命名吗,MoveFile(旧的路径,新的路径),把新的路径设成你想要的不就OK[Quote=引用 5 楼 tengyisong 的回复:]
引用 4 楼 sb3day 的回复:
MoveFile也可以
MoveFile如何实现呢?我看了下资料,应该是移动文件夹吧?重命名的话也有人问过,可是都没有说出用MoveFile实现的思路~
[/Quote]
回复
雪影 2009-08-14
没有看明白吗?ReNameFolder就是通过SHFileOperation函数实现的
回复
tengyisong 2009-08-14
各位抱歉,可能是我的意思没说清楚,现在这样:
把问题归结成这样:
已知:有一个文件夹,里边有若干字文件夹,每个文件夹里也有若干文件。设计的MFC Dialog上有两个Edit Control文本框,一个用于输入原文件夹的名字,另一个用于输入重命名后的名字。
问题:遍历文件夹,若是找到与第一个文本框中文本内容一致的文件夹,则将其重新命名,文件夹的名称为第二个文本框中的内容...要求各文件夹和文件的相对位置不变...
好心人们,大侠们帮帮忙哈~
回复
tengyisong 2009-08-14
[Quote=引用 10 楼 arpnet99 的回复:]
引用 2 楼 tttyd 的回复:
C/C++ code///////////////////////////////////////ReNameFolder//参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径//作用:修改原文件夹的名字。///////////////////////////////////////BOOL ReNameFolder(LPCTSTR lpszFromPath,LP¡­

呵呵.这段代码是我写....
贴在了我的空间里的
[/Quote]这段代码它表示的是不是只能重命名路径最末端的文件夹啊?一次只能重命名一个文件夹(路径的末端那个文件夹)?
回复
tengyisong 2009-08-14
那替换时是从高层开始替换,还是从其子目录下的每个根目录进行替换呢?用MoveFile(old,new)这个我知道,但是关键是从“外层”往里换呢,还是从“里层”文件夹往外换呢?纯粹的有两个路径的话我就不用问了...
回复
见习学术士 2009-08-14
最简单的使用::MoveFile

::MoveFile(m_strOldWebPath,strNewPath)
回复
zhuweiping2003 2009-08-14
备注一下
UP
回复
tengyisong 2009-08-14
[Quote=引用 1 楼 tttyd 的回复:]
SHFileOperation
  WINSHELLAPI  int  WINAPI  SHFileOperation(
          LPSHFILEOPSTRUCT  lpFileOp
  );
[/Quote]这个又是干嘛的呀?
回复
sb3day 2009-08-13
MoveFile也可以
回复
MoXiaoRab 2009-08-13
文件夹重名的话,后面加个[1]这样的标记就好了咯,GetFileAttributes()!=-1就说明文件存在
回复
雪影 2009-08-13
/////////////////////////////////////
//ReNameFolder
//参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径
//作用:修改原文件夹的名字。
//
/////////////////////////////////////
BOOL ReNameFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{
int nLengthFrm = strlen(lpszFromPath);
char *NewPathFrm = new char[nLengthFrm+2];
strcpy(NewPathFrm,lpszFromPath);
NewPathFrm[nLengthFrm] = '\0';
NewPathFrm[nLengthFrm+1] = '\0';

SHFILEOPSTRUCT FileOp;
ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));

FileOp.fFlags = FOF_NOCONFIRMATION ;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = NewPathFrm;
FileOp.pTo = lpszToPath;
FileOp.wFunc = FO_RENAME;

return SHFileOperation(&FileOp) == 0;
}
回复
雪影 2009-08-13
SHFileOperation


WINSHELLAPI int WINAPI SHFileOperation(
LPSHFILEOPSTRUCT lpFileOp
);
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……