如何使用asp.net从文件夹中删除特定文件

这里的交易我得到了一个datagridviewer,名为gridview1和fileupload1,当我上传文件时,它用文件名和路径更新gridview1和数据库中的表,并将所述文件存储在文件夹“Mag”中…但是现在我是什么想要做的是反过来我得到了如何使用gridview删除表条目但删除文件夹“Mag”无法正常使用C#中的以下代码或代码隐藏

protected void GridView1_Del(object sender, EventArgs e) { string DeleteThis = GridView1.SelectedRow.Cells[0].Text; string[] Files = Directory.GetFiles(@"i:/Website/WebSite3/Mag/"); foreach (string file in Files) { if (file.ToUpper().Contains(DeleteThis.ToUpper())) { File.Delete(file); } } } 

它给了我错误

“你调用的对象是空的。”

请告诉我,我做错了什么是新的,不必深入了解平台所以任何和所有的帮助将不胜感激提前感谢马克

这是我发现的答案感谢Tammy和其他所有人的答案

好的,交易目标函数从gridview和数据库表中删除文件详细信息,并从存储文件的项目文件夹中删除文件

在gridview的脚本部分,你想要包括

 OnRowDeleting="FuntionName" 

 OnSelectedIndexChanged = "FuntionName" 

要么

 OnRowDeleted="FuntionName" 

那么在C#代码中(代码隐藏)

 protected void FuntionName(object sender, GridViewDeleteEventArgs e) { // storing value from cell TableCell cell = GridView1.Rows[e.RowIndex].Cells[0]; // full path required string fileName = ("i:/Website/WebSite3/Mag/" + cell.Text); if(fileName != null || fileName != string.Empty) { if((System.IO.File.Exists(fileName))) { System.IO.File.Delete(fileName); } } } 

只是为那些想要学习的人提供了额外的参考

OnRowDeleting =“FuntionName”就是在删除行之前你可以取消删除或运行数据上的函数,就像我做的那样

它直接删除OnRowDeleted =“FuntionName”

这是我删除文件的方式

 if ((System.IO.File.Exists(fileName))) { System.IO.File.Delete(fileName); } 

还要确保您在删除时传递的文件名是准确的路径

编辑

您也可以使用以下事件,或者只使用此代码段中的代码并在您的方法中使用

 void GridView1_SelectedIndexChanged(Object sender, EventArgs e) { // Get the currently selected row using the SelectedRow property. GridViewRow row = CustomersGridView.SelectedRow; //Debug this line and see what value is returned if it contains the full path. //If it does not contain the full path then add the path to the string. string fileName = row.Cells[0].Text if(fileName != null || fileName != string.empty) { if((System.IO.File.Exists(fileName)) System.IO.File.Delete(fileName); } } 

检查GridView1.SelectedRow不为null:

 if (GridView1.SelectedRow == null) return; string DeleteThis = GridView1.SelectedRow.Cells[0].Text; 

在我的项目中我使用ajax并在我的代码中创建一个web方法,就像这样

在前

  $("#attachedfiles a").live("click", function () { var row = $(this).closest("tr"); var fileName = $("td", row).eq(0).html(); $.ajax({ type: "POST", url: "SendEmail.aspx/RemoveFile", data: '{fileName: "' + fileName + '" }', contentType: "application/json; charset=utf-8", dataType: "json", success: function () { }, failure: function (response) { alert(response.d); } }); row.remove(); }); 

在代码背后

  [WebMethod] public static void RemoveFile(string fileName) { List files = (List)HttpContext.Current.Session["Files"]; files.RemoveAll(f => f.FileName.ToLower().EndsWith(fileName.ToLower())); if (System.IO.File.Exists(HttpContext.Current.Server.MapPath("~/Employee/uploads/" + fileName))) { System.IO.File.Delete(HttpContext.Current.Server.MapPath("~/Employee/uploads/" + fileName)); } } 

我想这会对你有所帮助。

 string sourceDir = @"c:\current"; string backupDir = @"c:\archives\2008"; try { string[] picList = Directory.GetFiles(sourceDir, "*.jpg"); string[] txtList = Directory.GetFiles(sourceDir, "*.txt"); // Copy picture files. foreach (string f in picList) { // Remove path from the file name. string fName = f.Substring(sourceDir.Length + 1); // Use the Path.Combine method to safely append the file name to the path. // Will overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName), true); } // Copy text files. foreach (string f in txtList) { // Remove path from the file name. string fName = f.Substring(sourceDir.Length + 1); try { // Will not overwrite if the destination file already exists. File.Copy(Path.Combine(sourceDir, fName), Path.Combine(backupDir, fName)); } // Catch exception if the file was already copied. catch (IOException copyError) { Console.WriteLine(copyError.Message); } } // Delete source files that were copied. foreach (string f in txtList) { File.Delete(f); } foreach (string f in picList) { File.Delete(f); } } catch (DirectoryNotFoundException dirNotFound) { Console.WriteLine(dirNotFound.Message); } 

从路径中删除任何或特定的文件类型(例如“.bak”)。 见下面的演示代码 –

 class Program { static void Main(string[] args) { // Specify the starting folder on the command line, or in TraverseTree(ConfigurationManager.AppSettings["folderPath"]); // Specify the starting folder on the command line, or in // Visual Studio in the Project > Properties > Debug pane. //TraverseTree(args[0]); Console.WriteLine("Press any key"); Console.ReadKey(); } public static void TraverseTree(string root) { if (string.IsNullOrWhiteSpace(root)) return; // Data structure to hold names of subfolders to be // examined for files. Stack dirs = new Stack(20); if (!System.IO.Directory.Exists(root)) { return; } dirs.Push(root); while (dirs.Count > 0) { string currentDir = dirs.Pop(); string[] subDirs; try { subDirs = System.IO.Directory.GetDirectories(currentDir); } // An UnauthorizedAccessException exception will be thrown if we do not have // discovery permission on a folder or file. It may or may not be acceptable // to ignore the exception and continue enumerating the remaining files and // folders. It is also possible (but unlikely) that a DirectoryNotFound exception // will be raised. This will happen if currentDir has been deleted by // another application or thread after our call to Directory.Exists. The // choice of which exceptions to catch depends entirely on the specific task // you are intending to perform and also on how much you know with certainty // about the systems on which this code will run. catch (UnauthorizedAccessException e) { Console.WriteLine(e.Message); continue; } catch (System.IO.DirectoryNotFoundException e) { Console.WriteLine(e.Message); continue; } IEnumerable files = null; try { //get only .bak file var directory = new DirectoryInfo(currentDir); DateTime date = DateTime.Now.AddDays(-15); files = directory.GetFiles("*.bak").Where(file => file.CreationTime <= date); } catch (UnauthorizedAccessException e) { Console.WriteLine(e.Message); continue; } catch (System.IO.DirectoryNotFoundException e) { Console.WriteLine(e.Message); continue; } // Perform the required action on each file here. // Modify this block to perform your required task. foreach (FileInfo file in files) { try { // Perform whatever action is required in your scenario. file.Delete(); Console.WriteLine("{0}: {1}, {2} was successfully deleted.", file.Name, file.Length, file.CreationTime); } catch (System.IO.FileNotFoundException e) { // If file was deleted by a separate application // or thread since the call to TraverseTree() // then just continue. Console.WriteLine(e.Message); continue; } } // Push the subdirectories onto the stack for traversal. // This could also be done before handing the files. foreach (string str in subDirs) dirs.Push(str); } } } 

更多参考 - https://msdn.microsoft.com/en-us/library/bb513869.aspx