asp.net上传文件重命名的方法及IO修改文件名
来源:互联网 发布:美国世界警察知乎 编辑:程序博客网 时间:2024/05/18 17:26
- string name = this.FileUpload1.FileName;
- string type = name.Substring(name.LastIndexOf(".") + 1);
- //获取上传文件的后缀
- if (name != "")
- {
- string newName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + "." + type;
- //更改上传文件名
- string path = Server.MapPath("upfiles") + "\\" + newName;
- FileUpload1.SaveAs(path);
- }
知道原因吗?MSDN告诉我们:“Windows系统时钟精确到10~15毫秒”,也即说,DateTime类型只能精确到10~15毫秒。如果用时间命名,即便精确到毫秒,10~15毫秒内处理的文件,名字仍然会相同,有趣的bug仍然会产生。
故,不推荐使用日期时间命名文件。
有一种解决办法就是判断重名,如果文件名已经存在,那么就换一个名字,但是,这样每次都要判断。更要紧的是,随着时间的推移,现有的页面必然越来越多,每次生成都要遍历一下目录,岂不是很麻烦?虽然可能有比较好的搜索算法来提高效率,但是我想还不如从根本上解决这个问题更好。
string 新文件名 = Guid.NewGuid().ToString("N");
GUID的全拼是globally unique identifier,即全球唯一标识符。GUID是微软使用的一个术语,通过特定的算法,给某一个实体创建一个唯一的标识,此标识符可以保证全球唯一。
一个 GUID 共128位长(16字节),形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字,前4个字节为随机数;5-8字节为时间戳,记录了该GUID的生成时间(低16位字在前,以分钟为单位),保证了时间上的唯一;9-10字节与机器重启次数有关;最后6字节一般为该机器的网卡地址(如果这台机器没有网卡,则使用另一常数),从而保证了空间上的唯一。因此几乎不可能生成两个相同的GUID,从而保证了名字的唯一性。
GUID 在 .NET 中的使用很广泛,同时.NET Framework 提供了专门 Guid 类,用户可以很容易的产生GUID。比如在asp.net中就可以想这样产生一个GUID:System.GUID.NewGUID()。基于这样的原理,我就可以使用这个类为我生成的文件命名了,从根本上解决了重名的问题。不仅如此,这个方法还可以应用到上传文件的命名上。
进一步了解,发现GUID使用很广泛,其实我们平时也经常看到。如注册表、类及接口标识、数据库、以及自动生成的机器名、目录名等。你可以打开你的系统盘下\WINDOWS\Installer目录,可以看到很多类似{0EFDF2F9-836D-4EB7-A32D-038BD3F1FB2A}的文件夹,这就是系统自动生成的目录名。注册表中也可以发现这样的数字串,以前也不知道是什么,现在明白了,都是系统为了避免重名生成的GUID。
利用IO修改文件名的方法
修改文件名:System.IO.File.Move("SourceFileName","targetFileName");
修改目录名:System.IO.Directory.Move("SourceFolderName","targetFolderName");
- //Move方法的第一个参数必须是绝对路径.
- System.IO.File.Move(server.MapPath("相对路径"), "新文件名");
- System.IO.Directory.Move(Server.MapPath("相对路径"), ,"新文件夹名");
- String path= Server.MapPath("相对路径");
- if (File.Exists(path))//判断该路径是否存在该文件
- {
- File.Delete(path);//删除该文件
- File.Delete(path.Insert(path.LastIndexOf(@"\") + 1, "s_"));//删除缩略图
- }
- asp.net上传文件重命名的方法及IO修改文件名
- ASP修改文件名、重命名的方法
- Asp.net文件上传 重命名 以及自动创建上传目录
- ASP无组件上传修改上传文件名方法
- 重命名没有文件名文件的方法(针对.htaccess文件)
- ASP.NET上传文件的方法
- asp.net文件上传的常用方法
- asp.net 单文件上传的方法
- Asp.Net文件上传的基本方法
- ASP.NET MVC上传文件的方法
- asp自定义fckeditor上传文件的文件名
- ASP.NET文件上传方法
- fckeditor上传文件按日期存放及重命名方法
- FCKeditor_2 6 3 图片上传 重命名图片名称 删除上传后 文件 .NET技术 ASP.NET
- ASP.NET 修改文件上传尺寸限制
- 关于文件的上传及管理(asp.net)
- 自己封装的一个ASP.NET上传文件的方法
- ASP.NET文件的上传
- 从网上获取一个网页,在一个TextView中将其源代码显示出来
- 杭电ACM 1003:Max Sum
- xUtils 源码解析
- Qt使用总结
- Java 获取文件夹里文件的名字
- asp.net上传文件重命名的方法及IO修改文件名
- ViewPagerindicator 源码解析
- jquery使用心得小计
- Android中RemoteViews的实现
- 使用struts2标签<s:action无法显示引用页面问题
- 异步加载数据的三种实现
- 程序调试技巧 —— Attach to Process
- nginx open() "" failed (13: Permission denied), client
- 详解EBS接口开发之库存事务处理采购接收和退货