`

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

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

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。

 

 

利用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 C# MP3文件重命名为(演唱-歌曲名.mp3).rar

    "asp.net C# MP3文件重命名为(演唱-歌曲名.mp3).rar"这个标题暗示我们需要将MP3文件按照一种特定的格式进行重命名,即"演唱者-曲目名.mp3"。这种格式在音乐管理中很常见,因为它提供了清晰的歌手和歌曲名称信息,...

    asp.net上传文件 demo

    ASP.NET上传文件是一个常见的Web开发任务,用于允许用户在网站上提交本地文件并存储到服务器。这个"asp.net上传文件 demo"是一个实例,演示了如何在ASP.NET环境中处理文件上传。下面将详细介绍这个过程涉及的关键...

    ASP.NET 在下载文件时对其重命名的思路及实现方法

    使用`System.IO.File.Exists`方法来验证文件路径对应的文件是否存在。 3. **使用GUID防止文件名冲突** 当需要上传文件时,为了避免与同一目录下同名文件冲突,可以通过添加GUID来重命名文件。在***中,可以使用`...

    Asp.net文件在线管理系统源码_aspx开发教程.7z

    在ASP.NET中,我们可以使用`HttpPostedFile`类处理来自表单的上传文件,`System.IO`命名空间下的类如`FileStream`和`FileInfo`用于读取和写入本地文件。 3. **文件夹和文件操作**:源码可能包括了创建、删除、...

    asp.net文件管理

    ASP.NET文件管理是一个高效且用户友好的在线文件管理系统,它为开发者提供了在Web环境中便捷地处理文件的能力。这个系统基于Microsoft的ASP.NET框架,利用其强大的功能和灵活性,为用户提供了一个安全、稳定且易于...

    ASP.NET MVC3.0图片文件上传及管理程序-经典源码

    在“ASP.NET MVC3.0图片文件上传及管理程序”中,我们可以学习到如何在ASP.NET MVC3.0环境中实现文件上传和管理功能,特别是针对图片文件。 在ASP.NET MVC中,文件上传通常涉及到以下关键技术点: 1. **表单提交**...

    asp.net文件管理系统

    在ASP.NET中,文件操作主要依赖于System.IO命名空间中的类,如FileInfo、DirectoryInfo、FileStream等。这些类提供了对文件和目录的各种操作方法。例如,FileInfo用于获取和修改单个文件的信息,如大小、创建时间、...

    asp.net实现文件上传下载小网站

    在ASP.NET中实现文件上传和下载是Web开发中常见的需求,尤其对于初学者而言,这是一个很好的实践项目。本文将深入探讨如何使用ASP.NET技术来构建一个支持文件上传和下载的小型网站。 首先,我们需要理解ASP.NET的...

    简单的带滚动条上传,和文件重命名例子

    在.NET框架中,ASP.NET提供了多种处理文件上传的方法。一种常见的方式是使用`HttpPostedFileBase`类,它是`HttpRequest.Files`集合中的元素,可以用来获取上传的文件信息。用户通过HTML表单中的`<input type="file">...

    ASP.NET c# 文件上传与管理 代码

    ASP.NET C# 文件上传与管理是Web开发中的一个重要部分,尤其在构建动态网站或Web应用程序时,用户可能需要上传图片、文档或其他类型的文件。本文将深入探讨如何在ASP.NET环境中使用C#语言来实现文件上传功能,并对其...

    ASP.NET上传下载

    ASP.NET上传下载功能是Web开发中的重要组成部分,它允许用户在网页上上传文件到服务器,同时也支持从服务器下载文件到用户的本地计算机。在ASP.NET框架下,开发人员可以利用多种技术来实现这些功能,包括传统的HTTP...

    ASP.NET实现的简单易用文件上传类

    - `SetIsRenameSameFile(bool isRenameSameFile)` 方法用于处理上传时如果目标目录已存在同名文件时,是否重命名该文件。 4. 文件保存方法:`Save`方法是文件上传类的核心,它负责处理文件上传的逻辑,并返回一个...

    ASP.NET+jquery实现多文件上传

    4. **修改目录**:在ASP.NET中,可以使用`System.IO`命名空间提供的类(如`Directory`和`FileInfo`)来创建、重命名或移动服务器上的目录。这些操作需要适当的权限,并可能涉及事务处理以确保数据一致性。 5. **...

    文件上传与管理asp.net

    2. 文件操作:ASP.NET提供了一系列类,如`System.IO.File`,用于创建、删除、移动和重命名文件。例如,要删除一个文件,可以使用`File.Delete()`方法。 3. 文件数据库记录:为了跟踪文件信息(如上传时间、用户、...

    ASP.NET中图片的上传下载实例

    可以使用`System.IO.File`类的方法如`SaveAs()`来保存文件,并可能重命名文件以避免冲突。 5. 数据库记录:为了跟踪已上传的图片,可以创建数据库表来存储图片的URL、文件名、上传时间等信息。这有助于管理和检索...

    ASP.NET-[其他类别]文件管理系统源码(Asp.net1.1).zip

    1. **用户界面**:使用ASP.NET Web控件(如GridView、TreeView或ListView)来展示文件和目录结构,允许用户浏览、上传、下载、重命名和删除文件。 2. **文件存储**:文件通常存储在服务器的文件系统中,但也可能...

    asp.net(c#)后台管理

    3. **后台文件管理**:后台文件管理是系统的核心部分,允许管理员上传、下载、删除、重命名、移动和复制文件。这通常涉及到对文件系统的操作,使用System.IO命名空间中的类,如FileInfo、DirectoryInfo等。 4. **...

    ASP.NET源码——巢客文件管理系统.zip

    2. **文件上传与下载**:在ASP.NET中,可以使用HttpPostedFileBase类来处理文件上传。通过表单提交,用户选择本地文件,服务器端接收到文件后将其保存在指定的服务器目录。文件下载则通常通过HTTP响应流来实现,...

    .net 文件管理模块

    2. **FileInfo类**:用于表示单个文件,提供了获取文件属性(如大小、创建日期、修改日期等)和操作文件(如创建、重命名、删除、复制)的方法。例如,`FileInfo fi = new FileInfo("path_to_file");`创建一个...

    asp.net上传文档实例

    另外,三个<asp:Button>按钮分别对应不同的上传行为:保留原文件名上传、按时间重命名上传和限制类型上传。每个按钮都绑定了相应的事件处理函数。 3. 后台代码实现: 在后台代码中,首先需要引入必要的命名空间...

Global site tag (gtag.js) - Google Analytics