我正在参加「创意开发 投稿大赛」详情请看:掘金创意开发大赛来了!
- 电脑的文件多又乱,有强迫症如何整理呢?程序员当然要用程序员的方式了,最简单的方式,我们可以用程序根据文件的后缀名进行归类。
- 我们的效果就是用winfrom画出一个机器猫主窗体,当放入文件到机器猫的嘴里时,自动备份文件,同时机器猫的肚子上显示文件备份的路径和进度。
- 启动效果
-
放入文件效果
-
大文件复制代码,通过直接调用shell32.dll 动态链接库来进行文件的复制和移动,这样可以最大程度的保证我们移动复制过程中文件的可靠性。而且方便,性能远远好于自己读取写入。
#region .net封装后的api
/// <summary>
///文件拷贝
/// </summary>
/// <param name="oldfilenmme"></param>
/// <param name="newfilenmme"></param>
/// <param name="overwrite"></param>
/// <returns></returns>
public static bool FileCopyTo(string oldfilenmme, string newfilenmme, bool overwrite)
{
FileInfo oldfile = new FileInfo(oldfilenmme);
FileInfo newfile = oldfile.CopyTo(newfilenmme, overwrite);
return newfile.Exists;
}
#endregion
#region
private const int FO_COPY = 0x0002;
private const int FOF_ALLOWUNDO = 0x00044;
//显示进度条 0x00044 // 不显示一个进度对话框 0x0100 显示进度对话框单不显示进度条 0x0002显示进度条和对话框
private const int FOF_SILENT = 0x0002;//0x0100;
//
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 0)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;//指向发送消息的窗口
[MarshalAs(UnmanagedType.U4)]
public int wFunc;//执行的操作
public string pFrom;//源文件名
public string pTo;//目标文件名
public short fFlags;//操作与确认标识
[MarshalAs(UnmanagedType.Bool)]
public bool fAnyOperationsAborted;//操作是否终止
public IntPtr hNameMappings;//文件映射
public string lpszProgressTitle;//进度条标题
}
[DllImport("shell32.dll", CharSet = CharSet.Auto)]
static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
public static bool DoCopy(string strSource, string strTarget)
{
SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
fileop.wFunc = FO_COPY; //1.FO_COPY:复制2.FO_DELETE:删除3.FO_MOVE:移动4.FO_RENAME:重命名
fileop.pFrom = strSource;
fileop.lpszProgressTitle = "复制拷贝中";
fileop.pTo = strTarget;
//fileop.fFlags = FOF_ALLOWUNDO;
fileop.fFlags = FOF_SILENT;
return SHFileOperation(ref fileop) == 0;
}
#endregion
- 我们也可以根据自定义后缀名进行文件规则整理,自定义的文件规则存储在本地的一个xml配置文件中
- 这个就是我们整理后的效果拉,这样我们就可以方便的进行文件归类备份,再也不用满电脑都是各种文件,各种备份,已经备份的备份了。