asp.net上传文件重命名的方法及IO修改文件名

2019阿里云全部产品优惠券(好东东,强烈推荐)
领取地址 https://promotion.aliyun.com/ntms/yunparter/invite.html

推荐:Flash上传文件(结合asp.net)

[Flash上传文件(结合asp.net) 一、实现原理。在某些场合,我们需要使用Flash进行“文件上传”,原因是Flash 能制作出表现力丰富的UI界面。 (自负又孤陋寡闻的我在这里做一

文件上传时为了避免覆盖掉文件名相同的文件,一般都是采用系统时间当文件名,精确到毫秒,这样可以防止上传文件冲突 

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); 
}
    以上示例精确到毫秒,问题就就解决了? 防止1秒内被处理的文件获得的新名称都相同经过上面的改造,会发现问题减少了很多,不再经常“丢”图片了……但是,偶尔还是有照片丢失的情况发生……

知道原因吗?MSDN告诉我们:“Windows 系统时钟精确到10~15毫秒”,也即说,DateTime类型只能精确到10~15毫秒。 如果用时间命名,即便精确到毫秒,10~15毫秒内处理的文件,名字仍然会相同,有趣的bug仍然会产生。

故,不推荐使用日期时间命名文件。
有一种解决办法就是判断重名,如果文件名已经存在,那么就换一个名字,但是,这样每次都要判断。更要紧的是,随着时间的推移,现有的页面必然越来越多,每次生成都要遍历一下目录,岂不是很麻烦?虽然可能有比较好的搜索算法来提高效率,但是我想还不如从根本上解决这个问题更好。   那怎么办呢?用Guid!唯一的、一出生即与众不同的家伙,它的唯一性,理论上保证了同一目录下无可能出现重复的文件名。
string 新文件名 = Guid.NewGuid().ToString("N");
  GUID介绍:

      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。

 

 

推荐:asp.net上传文件

[#region 上传文件的方法     /// <summary>     /// 上传文件方法     /// </summary>     /// <param name="myFileUpload">上传控件ID</param>     /// <param name="all

利用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使用FileUpload上传文件

[ 前台代码: <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /> ...]

相关推荐