整盘备份的小项目(c#)

原创 2004年07月14日 15:41:00

app.cs

using System;
using System.IO;

namespace com.todayisp.bakup
{
 /// <summary>
 /// app 的摘要说明。
 /// </summary>
 public class app
 {
  //列举某个盘下面的所有目录,不包括文件。
  //目录路径pathstr,如e:/
  //返回以目录组成的数组。
  public string[] Directorys(string pathstr)
  {
   if(pathstr==null) return null;
   if(!Directory.Exists(pathstr))
   {
    Console.WriteLine("error:filepath not exist--"+pathstr);
    return null;
   }
   Console.WriteLine("start check path");
   string[] filestrs=Directory.GetDirectories(pathstr);
   for(int i=0;i<filestrs.Length;i++)
   {
    Console.WriteLine(filestrs[i]);
   }
   return filestrs;
  }


  //对目录进行压缩,采用rar.exe+命令行方式来处理。
  //rarName:要压缩成的rar文件路径及名称,如e:/abc.rar
  //dirName:要压缩的目录,如e:/abc
  public bool bak(string rarName,string dirName)
  {
   bool blnRst = false;
   string strArg = "a -r  {0} {1}";
   System.Diagnostics.Process p = new System.Diagnostics.Process();
   p.StartInfo.FileName = @"e:/rar.exe";//exe,bat and so on
   p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
   p.StartInfo.Arguments = String.Format(strArg, rarName, dirName);
   try
   {
    p.Start();
    p.WaitForExit();
    p.Close();
    blnRst = true;
   }
   catch
   {
   }
   return blnRst;
  }

  //压缩日志,每压缩一个文件夹就写入日志文件。
  //filestr日志路径,content日志内容
  public bool writeLog(string filestr,string content)
  {
   try
   {
    StreamWriter sw = new StreamWriter(filestr,true,System.Text.UTF8Encoding.UTF8);
    sw.WriteLine(content);
    sw.Close();
    
    return true;
   }
   catch
   {
    return false;
   }
  }

  //读取日志,分析日志,得出上次备份时间,从而可以选择是否操作
  //logPath日志路径,dirName要备份的目录名。
  public bool readLog(string logPath,string dirName,int intdate)
  {
   try
   {
    string str;
    StreamReader din = File.OpenText(logPath);
    while ((str = din.ReadLine()) != null)
    {
     string[] strs=str.Split(' ');
     if(strs[1]==dirName.ToLower())
     {
      Console.WriteLine(strs[0]+":"+strs[1]);
      Console.WriteLine(DateTime.Today.ToShortDateString());
      if(Convert.ToDateTime(DateTime.Today.ToShortDateString())<Convert.ToDateTime(strs[0]).AddDays(intdate))
      {
       din.Close();
       return false;
      }
     }
    }
    din.Close();
    return true;
   }
   catch{
    return false;
   }
  }
 }
}

 

//class1.cs程序入口

using System;
using System.IO;
using System.Configuration;

namespace com.todayisp.bakup
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //
   app App = new app();

   string pathstr = ConfigurationSettings.AppSettings["dir"];
   string maxcontent = ConfigurationSettings.AppSettings["maxcontent"];
   string logpath = ConfigurationSettings.AppSettings["logpath"];
   int bakupday = Convert.ToInt32(ConfigurationSettings.AppSettings["bakupday"]);
   string[] dir = App.Directorys(pathstr);
   if (dir==null) return;

   long content = 0;
   
   for(int i=0;i<dir.Length;i++)
   {
    try
    {
     if(content>=Convert.ToInt32(maxcontent)) return;
     string dirName=dir[i].Trim();
     string rarPath=dirName+".rar";
     int pos = rarPath.LastIndexOf(@"/");
     string rarName = rarPath.Substring(pos+1,rarPath.Length-pos-1);

     if(App.readLog(logpath,dirName,bakupday))   
     {
      bool bakup = App.bak(rarPath,dirName);
      bool bakup2 = App.writeLog(logpath,DateTime.Today.ToShortDateString()+" "+rarName+" "+dirName.ToLower());
      Console.WriteLine("Bakup "+dirName+" to "+rarName+" "+bakup+".Write to log "+bakup2);
      FileInfo fi = new FileInfo(rarPath);
      content = content + fi.Length;
      Console.WriteLine(content+"bytes");
     }
     else
     {
      Console.WriteLine("No need to bukup "+dirName);
     }
    }
    catch(Exception ex)
    {
     Console.WriteLine(ex.Message);
    }
   }

  }
  
 }
}

 

//bakup.exe.config配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!-- application specific settings -->

    <system.web>
        <customErrors mode="Off"/>
    </system.web>

    <appSettings>
 <add key="dir" value="e:/rui"  />
 <add key="maxcontent" value="2000" />
 <add key="logpath" value="e:/abc.txt" />
 <add key="bakupday" value="1" />
    </appSettings>
</configuration>

Linux常用命令(七)整盘备份与恢复(镜像)

7 linux系统整盘备份与恢复,镜像--dd      dd命令把指定的输入文件拷贝到指定的输出文件中,可做镜像。       注:若是使用emmc卡制作镜像时,需将emmc卡作为外接设备(U盘)接...
  • boon_228
  • boon_228
  • 2016年05月12日 09:21
  • 2842

新做了一个小项目, C#积累点 小知识点

1.公用配置性字符串可以放入一个constant类中,config字符串可以放入一个ConfigHelper中 2.注释多加一些,自己就回头看 或者别人看 都会有帮助 3.尽量少定义全局变量,减少...
  • Pro_monkey
  • Pro_monkey
  • 2016年10月25日 10:00
  • 484

【C#学习之路】练手小项目之——合成&分离gif

分离gif单帧图片: 方法1:                     Image imgGif = Image.FromFile(fileNames[i]); //加载gif文件          ...
  • wang03989
  • wang03989
  • 2016年09月01日 11:45
  • 1624

【C#】几个好玩的小例子

求闰年 乘法口诀 三元表达式 随机数
  • wangdongyanglys
  • wangdongyanglys
  • 2016年01月01日 10:30
  • 578

备份文件的小程序

import os import time source=[r'F:\py123'] target_dir=r'F:\\' today=target_dir+time....
  • studypythonwell
  • studypythonwell
  • 2017年03月03日 21:23
  • 152

有了这个列表,程序员不愁没练手的小项目了

翻译原文地址:http://blog.jobbole.com/49762/ 英文原文地址:http://www.dreamincode.net/forums/topic/78802-martyr2s...
  • awp0011
  • awp0011
  • 2015年11月09日 11:42
  • 2248

C#+SQL server 2012+vs2013课设小项目问题记录

sql课设
  • wzw_ice
  • wzw_ice
  • 2017年08月15日 16:05
  • 178

Linux下如何做整个硬盘的备份

公司的几台相同的服务器上面要做同样的配置,和设置,我感觉每次做重复的操作还是比较麻烦的,就想用一个完全配置好的硬盘来做一个镜像,然后复制到其他的硬盘上面。我上网找了一些方法,感觉最省劲儿的还是使用dd...
  • simonfirst
  • simonfirst
  • 2010年09月29日 16:41
  • 2945

VS工程备份

首先声明,我是新手。这是我的第一篇文章,其实也不知道说啥,就不啰嗦了。给像我这个的鞋童介绍个小东西。 我用C++做了一个小工具,来备份我们的工程。几乎没有什么技术含量,但胜在方便,就给大家分享一下哈!...
  • dongping8887
  • dongping8887
  • 2015年01月27日 20:04
  • 782

c# winform项目开发中常用到得一些小技巧

c# winform项目开发中常用到得一些小技巧 (1)DataGridView绘制行头序号 有时DataGridView加载的数量行比较多,而用户需要根据行号来判读数据,此时在DataGridVie...
  • zhuzit
  • zhuzit
  • 2009年08月06日 17:26
  • 1691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整盘备份的小项目(c#)
举报原因:
原因补充:

(最多只允许输入30个字)