日期:2011-01-25 23:11:00 来源:本站整理
数据库中海量文件的批量转移办法[MSSQL防范]
本文“数据库中海量文件的批量转移办法[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
事情的经过是这模样的!数据库A表增添一条记录,**系统中B目录下就会多出5n个文件.随着系统运行3年多,B目录中的文件数已高达2M多,而这些文件恰好又是用户高度频繁拜候的.于是问题就来了,一方面是用户拜候文件速度变慢了;另一方面是文件太多,很难保护.
怎么办呢?思许好久,发现A表中有个录入时间字段是不会变更的.假如截取录入时间的年份+月份构成,用来成立B目录下的子目录名,把昔时当月新增的文件统一归档于该子目录下,不便可以吗?新增的文件好处理,可关于旧文件归档需求费点周折,因为文件得迁移到新的子目录里.
下面是关于文件迁移的主要代码:
- static void Main(string[] args)
- {
- string paperPath = ConfigurationManager.AppSettings["PaperBuildPath"];
- Console.WriteLine(string.Format("试卷目录:{0}", paperPath));
- Console.WriteLine();
- Console.WriteLine("目录能否精确? 精确请按肆意键......");
- Console.WriteLine();
- Console.ReadKey();
- string[] files = Directory.GetFiles(paperPath);
- int num = 0;
- PublicExam[] list = Gateway.Default.FindArray<PublicExam>();
- foreach (PublicExam publicExam in list)
- {
- foreach (string file in files)
- {
- //源文件名(去除途径后)
- string fileName = file.Split('\\').Last();
- if (fileName.StartsWith(publicExam.FGuid.ToString(), StringComparison.CurrentCultureIgnoreCase))
- {
- //目标文件夹
- string destFilePath = paperPath + publicExam.FInputTime.ToString("yyyyMM");
- if (Directory.Exists(destFilePath) == false)
- Directory.CreateDirectory(destFilePath);
- //目标文件名
- string destFileName = destFilePath + "\\" + fileName;
- if (File.Exists(destFileName))
- File.Delete(destFileName);
- Console.WriteLine(string.Format("正在迁移文件:{0}", fileName));
- //迁移文件
- File.Move(file, destFileName);
- num++;
- }
- }
- }
- Console.WriteLine();
- Console.WriteLine(string.Format("共迁移{0}个文件,请按肆意键退出......", num));
- Console.ReadKey();
- }
上面例子参考了MSDN 关于File Class 和 Directory Class 的利用办法.
履行效果图以下:
Tips:
目录名(年份+月份) 如:201101
c# => DateTime.Now.ToString("yyyyMM")
SQL => convert(varchar(6),getdate(),112)
当然仅仅文件迁移是不够的,还有很多工作要做,比方改正程序;更新数据库表记录等等.我知道,这次“手术”不符合开放-关闭原则.
以上是“数据库中海量文件的批量转移办法[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论