数据库中海量文件的批量转移方法

事情的经过是这样子的!数据库A表添加一条记录,**系统中B目录下就会多出5n个文件。随着系统运行3年多,B目录中的文件数已高达2M多,而这些文件恰恰又是用户高度频繁访问的。于是问题就来了,一方面是用户访问文件速度变慢了;另一方面是文件太多,很难维护。

创新互联公司专业为企业提供丰润网站建设、丰润做网站、丰润网站设计、丰润网站制作等企业网站建设、网页设计与制作、丰润企业网站模板建站服务,10年丰润做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

怎么办呢?思许良久,发现A表中有个录入时间字段是不会变更的。如果截取录入时间的年份+月份组成,用来创建B目录下的子目录名,把当年当月新增的文件统一归档于该子目录下,不就可以吗?新增的文件好处理,可对于旧文件归档需要费点周折,因为文件得迁移到新的子目录里。

下面是关于文件迁移的主要代码:

 
 
 
 
  1.  static void Main(string[] args) 
  2.    string paperPath = ConfigurationManager.AppSettings["PaperBuildPath"]; 
  3.   Console.WriteLine(string.Format("试卷目录:{0}", paperPath)); 
  4.  Console.WriteLine(); 
  5.   Console.WriteLine("目录是否正确? 正确请按任意键......"); 
  6.   Console.WriteLine(); 
  7.  Console.ReadKey(); 
  8.   string[] files = Directory.GetFiles(paperPath); 
  9.  int num = 0; 
  10.   PublicExam[] list = Gateway.Default.FindArray(); 
  11.  foreach (PublicExam publicExam in list) 
  12.   foreach (string file in files) 
  13.     { 
  14.       //源文件名(去除路径后) 
  15.       string fileName = file.Split('\\').Last(); 
  16.  if (fileName.StartsWith(publicExam.FGuid.ToString(), StringComparison.CurrentCultureIgnoreCase)) 
  17.       { 
  18.          //目标文件夹 
  19.          string destFilePath = paperPath + publicExam.FInputTime.ToString("yyyyMM"); 
  20.       if (Directory.Exists(destFilePath) == false) 
  21.            Directory.CreateDirectory(destFilePath); 
  22.       //目标文件名 
  23.        string destFileName = destFilePath + "\\" + fileName; 
  24.       if (File.Exists(destFileName)) 
  25.           File.Delete(destFileName); 
  26.          Console.WriteLine(string.Format("正在迁移文件:{0}", fileName)); 
  27.       //迁移文件 
  28.        File.Move(file, destFileName); 
  29.       num++; 
  30.        } 
  31.      } 
  32.     } 
  33.   Console.WriteLine(); 
  34.  Console.WriteLine(string.Format("共迁移{0}个文件,请按任意键退出......", num)); 
  35.    Console.ReadKey(); 
  36.  } 

上面例子参考了MSDN 关于File Class 和 Directory Class 的使用方法。

执行效果图如下:

Tips:

目录名(年份+月份) 如:201101

c#   => DateTime.Now.ToString("yyyyMM")

SQL => convert(varchar(6),getdate(),112)

当然仅仅文件迁移是不够的,还有很多工作要做,比如修改程序;更新数据库表记录等等。我知道,这次“手术”不符合开放-关闭原则。

网站栏目:数据库中海量文件的批量转移方法
分享路径:http://www.csdahua.cn/qtweb/news17/551467.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网