文件上传时为了避免覆盖掉文件名相同的文件,一般都是采用系统时间当文件名,精确到毫秒,这样可以防止上传文件冲突
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"这个标题暗示我们需要将MP3文件按照一种特定的格式进行重命名,即"演唱者-曲目名.mp3"。这种格式在音乐管理中很常见,因为它提供了清晰的歌手和歌曲名称信息,...
ASP.NET上传文件是一个常见的Web开发任务,用于允许用户在网站上提交本地文件并存储到服务器。这个"asp.net上传文件 demo"是一个实例,演示了如何在ASP.NET环境中处理文件上传。下面将详细介绍这个过程涉及的关键...
使用`System.IO.File.Exists`方法来验证文件路径对应的文件是否存在。 3. **使用GUID防止文件名冲突** 当需要上传文件时,为了避免与同一目录下同名文件冲突,可以通过添加GUID来重命名文件。在***中,可以使用`...
在ASP.NET中,我们可以使用`HttpPostedFile`类处理来自表单的上传文件,`System.IO`命名空间下的类如`FileStream`和`FileInfo`用于读取和写入本地文件。 3. **文件夹和文件操作**:源码可能包括了创建、删除、...
ASP.NET文件管理是一个高效且用户友好的在线文件管理系统,它为开发者提供了在Web环境中便捷地处理文件的能力。这个系统基于Microsoft的ASP.NET框架,利用其强大的功能和灵活性,为用户提供了一个安全、稳定且易于...
在“ASP.NET MVC3.0图片文件上传及管理程序”中,我们可以学习到如何在ASP.NET MVC3.0环境中实现文件上传和管理功能,特别是针对图片文件。 在ASP.NET MVC中,文件上传通常涉及到以下关键技术点: 1. **表单提交**...
在ASP.NET中,文件操作主要依赖于System.IO命名空间中的类,如FileInfo、DirectoryInfo、FileStream等。这些类提供了对文件和目录的各种操作方法。例如,FileInfo用于获取和修改单个文件的信息,如大小、创建时间、...
在ASP.NET中实现文件上传和下载是Web开发中常见的需求,尤其对于初学者而言,这是一个很好的实践项目。本文将深入探讨如何使用ASP.NET技术来构建一个支持文件上传和下载的小型网站。 首先,我们需要理解ASP.NET的...
在.NET框架中,ASP.NET提供了多种处理文件上传的方法。一种常见的方式是使用`HttpPostedFileBase`类,它是`HttpRequest.Files`集合中的元素,可以用来获取上传的文件信息。用户通过HTML表单中的`<input type="file">...
ASP.NET C# 文件上传与管理是Web开发中的一个重要部分,尤其在构建动态网站或Web应用程序时,用户可能需要上传图片、文档或其他类型的文件。本文将深入探讨如何在ASP.NET环境中使用C#语言来实现文件上传功能,并对其...
ASP.NET上传下载功能是Web开发中的重要组成部分,它允许用户在网页上上传文件到服务器,同时也支持从服务器下载文件到用户的本地计算机。在ASP.NET框架下,开发人员可以利用多种技术来实现这些功能,包括传统的HTTP...
- `SetIsRenameSameFile(bool isRenameSameFile)` 方法用于处理上传时如果目标目录已存在同名文件时,是否重命名该文件。 4. 文件保存方法:`Save`方法是文件上传类的核心,它负责处理文件上传的逻辑,并返回一个...
4. **修改目录**:在ASP.NET中,可以使用`System.IO`命名空间提供的类(如`Directory`和`FileInfo`)来创建、重命名或移动服务器上的目录。这些操作需要适当的权限,并可能涉及事务处理以确保数据一致性。 5. **...
2. 文件操作:ASP.NET提供了一系列类,如`System.IO.File`,用于创建、删除、移动和重命名文件。例如,要删除一个文件,可以使用`File.Delete()`方法。 3. 文件数据库记录:为了跟踪文件信息(如上传时间、用户、...
可以使用`System.IO.File`类的方法如`SaveAs()`来保存文件,并可能重命名文件以避免冲突。 5. 数据库记录:为了跟踪已上传的图片,可以创建数据库表来存储图片的URL、文件名、上传时间等信息。这有助于管理和检索...
1. **用户界面**:使用ASP.NET Web控件(如GridView、TreeView或ListView)来展示文件和目录结构,允许用户浏览、上传、下载、重命名和删除文件。 2. **文件存储**:文件通常存储在服务器的文件系统中,但也可能...
3. **后台文件管理**:后台文件管理是系统的核心部分,允许管理员上传、下载、删除、重命名、移动和复制文件。这通常涉及到对文件系统的操作,使用System.IO命名空间中的类,如FileInfo、DirectoryInfo等。 4. **...
2. **文件上传与下载**:在ASP.NET中,可以使用HttpPostedFileBase类来处理文件上传。通过表单提交,用户选择本地文件,服务器端接收到文件后将其保存在指定的服务器目录。文件下载则通常通过HTTP响应流来实现,...
2. **FileInfo类**:用于表示单个文件,提供了获取文件属性(如大小、创建日期、修改日期等)和操作文件(如创建、重命名、删除、复制)的方法。例如,`FileInfo fi = new FileInfo("path_to_file");`创建一个...
另外,三个<asp:Button>按钮分别对应不同的上传行为:保留原文件名上传、按时间重命名上传和限制类型上传。每个按钮都绑定了相应的事件处理函数。 3. 后台代码实现: 在后台代码中,首先需要引入必要的命名空间...