• 对照实验(1)-批量清理系统临时文件


    语言之争由来已久,下面做一些IO实验(遍历9G多的文件,批量删除),尽量用事实来比较谁优谁劣。操作系统:win7 64 位,文件包大小:9.68G。

    一、语言:C#

    开发环境:vs 2013

    代码总行数:43行

    耗时:7秒

    代码:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace BatchDelete
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 输入目录 e:	mp
                string path;
                Console.WriteLine("输入要清理的目录:");
                path = Console.ReadLine();
                // 开始计时
                Console.WriteLine("开始计时:"+DateTime.Now.ToString("HH:mm:ss"));
                // 先遍历匹配查找再循环删除
                if (Directory.Exists(path))
                {
                    Console.Write("正在删除");
                    foreach (string fileName in Directory.GetFileSystemEntries(path))
                    {
                        if (File.Exists(fileName) && fileName.Contains("cachegrind.out"))
                        {
                            File.Delete(fileName);
                        }
                    }
                    Console.WriteLine("");
                }
                else
                {
                    Console.WriteLine("该目录不存在!");
                }
                // 计时结束
                Console.WriteLine("结束计时:" + DateTime.Now.ToString("HH:mm:ss"));
                Console.ReadKey();
            }
        }
    }

    运行效果图:

    二、语言:C/C++

    开发环境:vs 2013

    代码总行数:50行

    耗时:36秒

    代码:

    #include <iostream>
    #include <string>
    #include <Windows.h>
    #include <boostfilesystemoperations.hpp>
    #include <boostfilesystempath.hpp>
    #include <boostfilesystemconvenience.hpp>
    #include <boostalgorithmstring.hpp>
    using namespace std;
    
    int main(int argc, char * argv[])
    {
        // 输入目录 e:	mp
        string strPath;
        cout << "输入要清理的目录:" << endl;
        getline(cin, strPath);
        // 开始计时    
        SYSTEMTIME sys_time;        //声明变量
        GetLocalTime(&sys_time);    //将变量值设置为本地时间
        printf("开始计时:%02d:%02d:%02d
    ", sys_time.wHour,sys_time.wMinute,sys_time.wSecond);
        // 先遍历匹配查找再循环删除
        namespace fs = boost::filesystem;
        fs::path full_path(fs::initial_path());
        full_path = fs::system_complete(fs::path(strPath, fs::native));
        if (fs::exists(full_path))
        {
            cout << "正在删除" ;
            fs::directory_iterator item_begin(full_path);
            fs::directory_iterator item_end;
            for (; item_begin != item_end; item_begin++)
            {
                if (!fs::is_directory(*item_begin))
                {
                    if (fs::exists(item_begin->path()) && boost::contains(item_begin->path().string(), "cachegrind.out"))
                    {
                        fs::remove(item_begin->path());
                    }
                }
            }
            cout << "" << endl;
        }
        else
        {
            cout << "该目录不存在!" << endl;
        }
        // 计时结束
        GetLocalTime(&sys_time);
        printf("计时结束:%02d:%02d:%02d
    ", sys_time.wHour, sys_time.wMinute, sys_time.wSecond);
        system("pause");
        return 0;
    }

    运行效果图:

    三、语言:PHP

    开发环境:Phpstorm

    代码总行数:32行

    耗时:13秒

    代码:

    <?php
    /**
     * Created by PhpStorm.
     * User: Administrator
     * Date: 16-1-29
     * Time: 上午9:31
     */
    date_default_timezone_set('prc');
    //输入目录 e:	mp
    $path = 'e:	mp';
    //开始计时
    echo date("H:i:s",time()) . '<br/>';
    //先遍历匹配查找再循环删除
    if(is_dir($path))
    {
        echo "正在删除";
        $mydir = dir($path);
        while($file = $mydir->read())
        {
            if(file_exists("$path/$file") && strpos($file, 'cachegrind.out') === 0)
            {
                unlink("$path/$file");
            }
        }
        echo '<br/>';
    }
    else
    {
        echo "该目录不存在!" . '<br/>';
    }
    //计时结束
    echo date("H:i:s",time()) . '<br/>';
    

    运行效果图:

    四、语言:Java

    开发环境:eclipse

    代码总行数:43行

    耗时:10秒

    代码:

    package com.yejing;
    
    import java.io.File;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    
    public class Test {
    
    	public static void main(String[] args) {
    		Scanner s = new Scanner(System.in);
    		// 输入目录 e:	mp
    		String path = null;
    		System.out.println("输入要清理的目录:");
    		path = s.next();
    		// 开始计时
    		Date nowTime=new Date(); 
    		SimpleDateFormat time=new SimpleDateFormat("HH:mm:ss"); 
    		System.out.println("开始计时:"+ time.format(nowTime)); 
    		// 先遍历匹配查找再循环删除
    		File dir = new File(path);
    		if(dir.exists()){
    			System.out.print("正在删除");
    			File[] fs = dir.listFiles();
    			for(int i=0;i<fs.length;i++){
    				if(!fs[i].isDirectory()){
    					if(fs[i].isFile() && fs[i].exists() && fs[i].getName().contains("cachegrind.out"))
    					{
    						fs[i].delete();  
    					}
    				}
    			}
    			System.out.println("");
    		}else{
    			System.out.println("该目录不存在!");
    		}
    		// 计时结束
    		nowTime=new Date(); 
    		System.out.println("开始计时:"+ time.format(nowTime)); 
    	}
    
    }
    

    运行效果图:

    五、语言:Python 3.3.5

    开发环境:IDLE

    代码总行数:20行

    耗时:10秒

    代码:

    # -*- coding: utf-8 -*-  
    import datetime
    import os
     
    # 输入目录 e:	mp
    path = input("输入要清理的目录:
    ");
    # 开始计时
    print("开始计时:",datetime.datetime.now().strftime('%H:%M:%S'));
    # 先遍历匹配查找再循环删除
    if(os.path.exists(path)):
        print("正在删除");
        for parent,dirnames,filenames in os.walk(path):
            for filename in filenames:
                targetFile = os.path.join(parent,filename)
                if (os.path.isfile(targetFile) and "cachegrind.out" in targetFile):
                    os.remove(targetFile)
    else:
        print("该目录不存在!");
    # 计时结束
    print("结束计时:",datetime.datetime.now().strftime('%H:%M:%S'));
    

    运行效果图:

  • 相关阅读:
    day_07 深浅拷贝
    day_06 再谈编码
    day_05 字典
    day_04 列表
    day_03 字符串
    HDU 1049 Climbing Worm
    HDU 1720 A+B Coming
    Pascal向C++的跨越
    B-Boxes
    喵哈哈村的狼人杀大战(4)
  • 原文地址:https://www.cnblogs.com/yejing-snake/p/5166825.html
Copyright © 2020-2023  润新知