免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2272|回复: 5
收起左侧

【walkscript】代码清理脚本

[复制链接]

22

主题

444

铜板

3

好友

助理工程师

Rank: 5Rank: 5

积分
265
发表于 2012-10-24 10:56 | 显示全部楼层 |阅读模式
使用vs编译工程,往往生成一些不必要的中间文件。
时间一长,硬盘被塞得满满的,计算机越跑越慢。

WalkScript支持COM组件编程方式,利用FileSystemObject可以方便地删除这些文件。
walk清理代码.png

同样,如果想自定义清除某一类型的文件,只需要在代码
GetFiles(collection, path, ".obj | .pch | .pdb | .idb | .sbr | .tlog | .bsc | .ilk | .exp | .opt | .ncb | .sdf | .ipch");
加入对应的文件类型即可。

22

主题

444

铜板

3

好友

助理工程师

Rank: 5Rank: 5

积分
265
 楼主| 发表于 2012-10-24 10:56 | 显示全部楼层
本帖最后由 walk.djg 于 2012-10-19 09:57 编辑

代码如下:


#include "getFiles.cpp"

void main()
{
        wkView view;
        string path = view.dlgFolder("");
        if (path.isEmpty())
                return;
        
        array collection;
        GetFiles(collection, path, ".obj | .pch | .pdb | .idb | .sbr | .tlog | .bsc | .ilk | .exp | .opt | .ncb | .sdf | .ipch");
        wkFile file;
        wkCom ofs;
        ofs.create("Scripting.FileSystemObject"); //ProgID:        Scripting.FileSystemObject
                                                                //CLSID: {0D43FE01-F093-11CF-8940-00A0C9054228}        
        int nFileTotalSize = 0;
        int nCount = collection.getSize();
        for (int i = 0; i < nCount; ++i)
        {
                string strFilePath = collection;
               
wkCom iFile = ofs.GetFile(strFilePath);
                nFileTotalSize += iFile.Size();
                ofs.DeleteFile(strFilePath, true); //强制删除
        }
        
        ofs.free(); //create, 别忘了free
        
        bool bShowM = (nFileTotalSize/(1024.*1024.)) > 1.0;
        string msg;
        msg.format("文件夹:%s\n清理了%d个文件, 总计%.3f%s\n", path, nCount,
                                        bShowM ? (nFileTotalSize/(1024.*1024.)) : (nFileTotalSize/1024.),
                                        bShowM ? "M" : "K");
        trace(msg);
}

回复 支持 反对

使用道具 举报

22

主题

444

铜板

3

好友

助理工程师

Rank: 5Rank: 5

积分
265
 楼主| 发表于 2012-10-24 10:57 | 显示全部楼层
其中,#include "getFiles.cpp"文件中的代码如下:

// use like this
/*
   string path = "c:\\windows";
   array collection;
   //仅获取"ini"格式的文件
   GetFiles(collection, path, ".ini");
   //获取"ini", "txt"格式的文件
   GetFiles(collection, path, ".ini | .txt");
*/

void GetFiles(array& files, string strPath, string strDot)
{
   wkDb db;
   array oDots = db.sqlSubsByDeli(strDot, "|");
   for (int i = 0; i < oDots.getSize(); ++i)
   {
           oDots.trimLeft();
           oDots.trimRight();
   }
   
   wkFile finder;

   // build a string with wildcards
   string strWildcard = strPath;
        if (strWildcard.isEmpty())
                return;
   strWildcard.trimRight("\\");
   strWildcard += "\\*.*";
        
   // start working for files
   bool bWorking = finder.findFile(strWildcard);

   while (bWorking)
   {
      bWorking = finder.findNextFile();

      // skip . and .. files; otherwise, we'd
      // recur infinitely!

           //Is dot? 4 -- dot
      if (finder.findFileIs(4))
         continue;

      // if it's a directory, recursively search it
          // 3 -- directory
      if (finder.findFileIs(3))
      {
                  // 2 -- file path
         string ss = finder.findFileGet(2);  
         GetFiles(files, ss, strDot);
      }
          else
          {
                  string s = finder.findFileGet(2);
                  int n = s.reverseFind(".");
                  if (n>0 && IsInDefineType(s.mid(n), oDots))
                        files.add(finder.findFileGet(2));
          }
   }

   finder.findClose();
}

bool IsInDefineType(string s, array& o)
{
        for (int i = 0; i < o.getSize(); ++i)
        {
                if (o.compareNoCase(s)==0)
                        return true;
        }
        return false;
}

回复 支持 反对

使用道具 举报

185

主题

2898

铜板

13

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2398
发表于 2012-10-26 08:57 | 显示全部楼层
很不错的 学习了!
回复 支持 反对

使用道具 举报

22

主题

444

铜板

3

好友

助理工程师

Rank: 5Rank: 5

积分
265
 楼主| 发表于 2012-10-30 11:40 | 显示全部楼层

改一下这几句代码:

array collection;
GetFiles(collection, path, ".obj | .pch | .pdb | .idb | .sbr | .tlog | .bsc | .ilk | .exp | .opt | .ncb | .sdf | .ipch");

就可以删除自定义类型的文件了。




回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

3258

铜板

0

好友

禁止发言

积分
1892
发表于 2025-1-14 15:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表