记录一次文件迁移

  事情的经过是这样子的!数据库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)

 

当然仅仅文件迁移是不够的,还有很多工作要做,比如修改程序;更新数据库表记录等等。我知道,这次“手术”不符合开放-关闭原则,但也是无奈之举。欢迎各位园友多多拍砖!

转载于:https://www.cnblogs.com/hailibu/archive/2011/01/05/1926361.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门

上一篇文章学习了中断与异常的概念&#xff1a;【OS学习笔记】三十四 保护模式十&#xff1a;中断和异常区别 本片文章接着学习以下内容&#xff1a; 中断描述符表中断门陷阱门 1 中断描述符表 我们前面讲了无数次&#xff0c;在实模式下&#xff0c;是由位于低地址的1M内存…

【OS学习笔记】三十六 保护模式十:通过中断发起任务切换----中断任务

上一篇文章学习了&#xff1a;OS学习笔记】三十五 保护模式十&#xff1a;中断描述符表、中断门和陷阱门 本篇文章接着上一篇文章学习中断任务。 我们在前面文章中一直在说通过中断发起任务切换&#xff0c;本文就是将之前没有说明白的内容&#xff1a;通过中断发起任务切换讲…

小议传统分层与新式分层,抑或与DDD分层

引言本文提到的分层只是软件架构上的分层。文中的传统分层指的是传统的三层结构&#xff1a;UI&#xff08;界面表现层&#xff09;,BLL&#xff08;业务逻辑层&#xff09;,DAL&#xff08;数据访问层&#xff09;。文中提出的观点也都是个人的一点认识&#xff0c;与任何组织…

WCF 第八章 安全 客户端认证

一个服务的客户端认证是通过向服务提供一系列信赖的声明。声明可以是任何形式&#xff0c;只要客户端和服务端理解这个格式并信赖它的来源就可以。 如果客户端和服务端共享一个秘密信息&#xff0c;比如一个用户名和密码&#xff0c;只要客户端通过一个合法认证发送数据&#x…

前端学习(205):animation动画库

动画库 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" conte…

【剑指offer - C++/Java】7、斐波那契数列

在线题目链接&#xff1a;斐波那契数列 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&a…

【剑指offer - C++/Java】8、跳台阶

在线题目链接&#xff1a;跳台阶 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳…

【剑指offer - C++/Java】10、矩形覆盖

在线题目链接&#xff1a;矩形覆盖 文章目录1 题目描述2 题目分析3 代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划算法3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形…

【剑指offer - C++/Java】12、数值的整数次方

在线题目链接&#xff1a;数值的整数次方 文章目录1 题目描述2 题目分析2.1 方法1 循环2.11 Java代码2.12 C代码2.2 方法2 递归2.21 Java代码2.22 C代码3 总结1 题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 2 题目分析 2.1 方…

【剑指offer - C++/Java】14、链表中倒数第k的节点

在线题目链接&#xff1a;链表中倒数第k的节点 文章目录1 题目描述2 题目分析2.1 Java代码2.2 C代码3 总结1 题目描述 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 2 题目分析 这道题比较简单。常规做法是先求出链表的总的节点个数n&#xff0c;然后再从头开始找第n-…

beta:scrum5

今天的工作 周一的工作 困难 王佳磊 收集数据&#xff0c;build了online的数据库, 38934 38939&#xff0c;收集更多数据&#xff0c;在新的API环境下&#xff0c;逐步发现并fix掉以前姓名到ID映射的bug. API的改动&#xff0c;ID的合并 肖巍&#xff0c;兰翠玲 等待测…

【软件开发底层知识修炼】十三 链接器-如何写出不依赖C库函数的代码

本文将综合以下4篇文章&#xff0c;学习如何写出不依赖libc库的程序&#xff1a; 【软件开发底层知识修炼】九 链接器-可重定位文件与可执行文件【软件开发底层知识修炼】十 链接器-main函数不是第一个被执行的函数【软件开发底层知识修炼】十一 链接器-链接脚本【软件开发底层…

前端学习(218):属性选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>属性选择器&…

【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用

前面几篇文章学习了链接器相关的内容。现在开始来学习GDB调试。我们的目的是通过这几篇文章将GDB调试完全学会。 文章目录1 为什么需要GDB2 GDB 的常规应用3 GDB调试程序实例4 总结1 为什么需要GDB 什么是GDB&#xff1f; GNU项目中的调试器&#xff08;gnu debuger&#xff0…

前端学习(219):css伪类选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS伪类<…

【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试

上一篇文章我们学习了使用GDB的最基本方法&#xff1a;【软件开发底层知识修炼】十四 快速学习GDB调试一 入门使用 本篇文章将学习GDB的断点调试。断点调试是一种非常重要的调试方法。 文章目录1 断点类型2 GDB软件断点调试相关操作2.1 通过函数名设置断点2.2 通过文件名行号…

Informix IDS 11体系操持(918测验)认证指南,第 4 部门: 机能调优(1)

对 IBM Informix Dynamic Server (IDS) 和它的分比如子体系举行调优&#xff0c;以失掉最佳机能。在一个冗长的概述之后&#xff0c;本教程给出了一些关于怎样检查数据库做事器及其子体系的例子。本文是这个分 8 部门的 系列教程 的第 4 部门&#xff0c;这个教程可以帮手您筹办…

前端学习(220):伪元素选择器

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>CSS伪元素&l…

【软件开发底层知识修炼】十六 快速学习GDB调试三 使用GDB的数据断点监测变量是否改变

上一篇文章我们学习了如何使用GDB进行软件断点调试和硬件断点调试&#xff1a;【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试本篇文章继续上一篇文章的学习&#xff0c;如何使用GDB的数据断点监测内存中的变量是否被改变 文章目录1 GDB的数据断点1.1 利…

AllTray-将办法最小化到琐细托盘

Toy Posted in AppsAllTray 是一个很有效的小办法&#xff0c;操纵它你可以将办法的窗口最小化到琐细托盘&#xff0c;从而腾出桌面空间以作它用。此办法主要为那些没有原生供给最小化到琐细托盘成效的办法而预备的。今朝&#xff0c;AllTray 可以在 GNOME、KDE、Xfce、Fluxbox…