以文件为例,如果对文件夹操作,基本上将File换为Directory即可 (例:FileInfo file = new FileInfo(Path);
与DirectoryInfo directory = new DirectoryInfo (Path);
)
1获取文件信息
在知道文件相对路径的情形,下面代码可以获取文件的详细信息
1 2 3 4 5 6 7 8 9 10 public static void fileinfo (string Path ) { Path = Server.MapPath(Path); FileInfo file = new FileInfo(Path); var length=file.Length; var name = file.Name; var fullname = file.FullName; var extension = file.Extension; ...... }
获取的信息还有创建时间,最后访问时间等等,可以自行研究
2新建文件
新建一个文件。(Create 后会一直占用,最好加上 Dispose)
1 2 3 4 5 6 7 8 9 10 11 12 public static void NewFile (string filePath ) { filePath=Server.MapPath(filePath); if (System.IO.File.Exists(newfilepath)) { throw new Exception("文件已经存在" ) } System.IO.File.Create(newfilepath); ...... }
3复制文件,移动(剪切)文件,重命名文件
复制文件:
1 2 3 4 5 6 7 8 9 10 11 12 public static void Copy (string Path,string targetPath ) { Path = Server.MapPath(Path); targetPath = Server.MapPath(targetPath); if (System.IO.File.Exists(targetPath)) { throw new Exception("存在同名文件" ); } System.IO.File.Copy(Path,targetPath); ....... }
移动文件,重命名:
1 2 3 4 5 6 7 8 9 10 11 12 13 public static void MoveOrRename (string Path,string targetPath ) { Path = Server.MapPath(Path); targetPath = Server.MapPath(targetPath); if (System.IO.File.Exists(targetPath)) { throw new Exception("已经存在同名文件" ); } System.IO.File.Move(Path,targetPath); ...... }
复制文件不会删除,移动或者重命名(方法相同,就是目标位置不同)会删除原文件.
4上传文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [HttpPost ] public ActionResult UploadFile (string dirPath ) { var filepath = Server.MapPath(Path); var file = Request.Files["file" ]; if (file == null || file.ContentLength == 0 ) { throw new Exception("文件不存在" ); } var newfilepath = Server.MapPath(dirPath + "\\" + file.FileName); if (System.IO.File.Exists(newfilepath)) { throw new Exception("文件不存在" ); } file.SaveAs(newfilepath); ...... }
会自动创建存有该类容和命名的文件,不用多此一举去创建一个新文件再放入内容.
5遍历当前目录和其子目录所有文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 private static string [] GetFiles (string dir, string regexPattern = null , bool recurse = true , bool throwEx = false ) { List<string > lst = new List<string >(); try { foreach (string item in Directory.GetFileSystemEntries(dir)) { try { bool isFile = (System.IO.File.GetAttributes(item) & FileAttributes.Directory) != FileAttributes.Directory; if (isFile && (regexPattern == null || Regex.IsMatch(Path.GetFileName(item), regexPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline))) { lst.Add(item); } if (recurse && !isFile) { lst.AddRange(GetFiles(item, regexPattern, true )); } } catch { if (throwEx) { throw ; } } } } catch { if (throwEx) { throw ; } } return lst.ToArray(); }
这个不多说,网上找到的代码,亲测有效
这样会导致W3P进程一直占用这个文件
System.IO.File.Create(HttpContext.Current.Server.MapPath(strName));
最好加上Dispose()
System.IO.File.Create(HttpContext.Current.Server.MapPath(strName)).Dispose();