美文网首页
kindle清理小工具(清理临时文件夹)

kindle清理小工具(清理临时文件夹)

作者: 秋月的私语 | 来源:发表于2021-02-02 13:28 被阅读0次

    用过kindle的童鞋知道,kindle的documents目录下,会产生很多类似于下面的临时文件夹。

    最新版软件下载地址:https://pan.baidu.com/s/1eSPG4RS

    主要是,即便你在kindle上删除了书籍,这些临时文件夹依然存在,有没有办法只删除哪些已经看完的书籍的临时文件呢?

    如果直接搜索.sdr和.dir目录,会将所有的目录列出来,不方便筛选,于是我写了这个小工具,只删除没有对应书籍的临时目录!

    直接将kindle的documents目录拖拽到小工具,选择移动目录(防止误删,一般不会误删,搜寻逻辑没问题),确定即可!

    这时,会在移动目录中保留被删除的目录(实际上是移动,防止误删,保持了目录结构!)。

    核心代码:

    //author:autumoon

    //日期:2021-02-02

    //TODO:在此添加命令处理程序代码

    CString strDstDir;

    GetDlgItemText(IDC_EDIT_DIR, strDstDir);

    if(!strDstDir.GetLength())

    {

    strDstDir = CMfcStrFile::BrowseDir(true,"选择移动文件到哪个文件夹");

    if(strDstDir.GetLength() >0)

    {

    SetDlgItemText(IDC_EDIT_DIR, strDstDir);

    }

    else

    {

    return;

    }

    }

    // if (strSrcDir == strDstDir)

    // {

    // MessageBox(_T("源地址和目标地址不能相同!"), _T("警告!"), MB_ICONWARNING);

    // return;

    // }

    std::vector<_tstring> vItems;

    intnItemNum = m_listItems.GetItemCount();

    for(inti =0; i < nItemNum; ++i)

    {

    CString strCurItem = m_listItems.GetItemText(i,0);

    _tstring stCurItem = CMfcStrFile::CString2string(strCurItem);

    vItems.push_back(stCurItem);

    }

    _tstring stDstDir = CMfcStrFile::CString2string(strDstDir);

    if(vItems.size() ==0|| !CStdDir::IfAccessDir(stDstDir) && !CStdDir::CreateDir(stDstDir))

    {

    return;

    }

    //获取文件

    _tstring stSrcDir = CMfcStrFile::CString2string(strDstDir);

    if(vItems.size() ==0)

    {

    AfxMessageBox(_T("请添加Kindle目录!"));

    return;

    }

    //保存配置文件

    m_cfg.vItemPaths = vItems;

    m_cfg.vSrcDirs.clear();

    m_cfg.vSrcDirs.push_back(stSrcDir);

    m_cfg.vDstPaths.clear();

    m_cfg.vDstPaths.push_back(stDstDir);

    WriteIniFile(GetIniPath(), m_cfg);

    //开始显示进度

    CTaskBarProgresstbp(m_hWnd);

    CProgressInterface* ppi = &tbp;

    ppi->Start();

    CElapsedTime et;

    //记录日志

    CLOG::Out(_T("%s"), _T("start task!"));

    //记录耗时

    et.Begin();

    /*********************************这里增加主程序 开始***************************************/

    //处理所有项目,推荐判断项目是否存在

    stDstDir = CStdStr::AddSlashIfNeeded(stDstDir);

    const_tstring stDstItem = stDstDir;

    for(inti =0; i < nItemNum; ++i)

    {

    const_tstring& stCurDir = vItems[i];

    //如果是目录

    if(PathIsDirectory(stCurDir.c_str()) && CStdStr::AddSlashIfNeeded(stCurDir) != stDstDir)

    {

    //处理文件夹

    std::vector<_tstring> vSubDirs;

    size_tnSubDirCount = getDirs(stCurDir, vSubDirs,true);

    for(intj =0; j < nSubDirCount; ++j)

    {

    _tstring stSubSrcDir = vSubDirs[j];

    //如果该文件是需要被处理的文件

    _tstring strName = CStdStr::GetNameOfDir(stSubSrcDir);

    //文件夹名中必须包含.dir

    if(strName.find(".dir") != _tstring::npos)

    {

    _tstring stFileName = stSubSrcDir.substr(0, stSubSrcDir.length() -4);

    //sdr目录

    _tstring stSdrDir = CStdStr::AddSlashIfNeeded(CStdStr::GetDirOfFile(stFileName)) + CStdStr::GetNameOfFile(stFileName,false) +".sdr";

    if(!CStdFile::IfAccessFile(stFileName))

    {

    //移动到目标目录

    _tstring strSubDstFile = stDstDir + stSubSrcDir.substr(CStdStr::AddSlashIfNeeded(stCurDir).length());

    _tstring strSubDir = CStdStr::GetDirOfFile(strSubDstFile);

    if(!CStdDir::IfAccessDir(strSubDir) && !CStdDir::CreateDir(strSubDir))

    {

    continue;

    }

    //移动文件夹到指定的文件夹

    moveDir(stSubSrcDir.c_str(), strSubDir.c_str());

    //如果存在sdr目录,则同时移动

    if(PathIsDirectory(stSdrDir.c_str()))

    {

    //移动到目标目录

    strSubDstFile = stDstDir + stSdrDir.substr(CStdStr::AddSlashIfNeeded(stCurDir).length());

    strSubDir = CStdStr::GetDirOfFile(strSubDstFile);

    if(!CStdDir::IfAccessDir(strSubDir) && !CStdDir::CreateDir(strSubDir))

    {

    continue;

    }

    moveDir(stSdrDir.c_str(), strSubDir.c_str());

    }

    }

    }

    ppi->SetProgressValue(j +1, nSubDirCount);

    }

    }

    }

    /*********************************这里增加主程序 结束***************************************/

    //结束耗时

    intnMin =0, nSecond =0, nMilliSecond =0;

    et.End(nMin, nSecond, nMilliSecond);

    //结束日志

    CLOG::Out(_T("%s"),_T("end task!"));

    CLOG::Out(_T("This task costs %d min %d second %d millisecond!"), nMin, nSecond, nMilliSecond);

    CLOG::End();

    //结束进度显示

    ppi->End();

    FlashWindow(TRUE);

    #ifdefDLG_ELAPSED_TIME

    CString strTips;

    strTips.Format(_T("本次耗时 %d分%d秒%d毫秒!"), nMin, nSecond, nMilliSecond);

    AfxMessageBox(strTips);

    #else

    AfxMessageBox(IDS_PROCESS_OVER);

    #endif// DLG_ELAPSED_TIME

    欢迎交流与讨论。

    相关文章

      网友评论

          本文标题:kindle清理小工具(清理临时文件夹)

          本文链接:https://www.haomeiwen.com/subject/bdkytltx.html