当前位置:编程学习 > C#/ASP.NET >>

如何在GRIDVIEW中删除文件路径同时删除文件?

源码如下:

我检查过几次代码了, 没有任何报错, 问题就出在文件老是删不了路径中的图片文件. 

<%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    
    Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
        If GridView1.EditIndex = -1 Then
            Return
        End If
        Dim fileUpLoad As FileUpload = TryCast(GridView1.Rows(GridView1.EditIndex).FindControl("FileUpload1"), FileUpload)
        Dim fileName As String = Guid.NewGuid().ToString()
        Dim extension As String = System.IO.Path.GetExtension(fileUpLoad.FileName)
        If fileUpLoad.HasFile Then
            'When insert a file, rename image as guid name
            fileUpLoad.SaveAs(Server.MapPath("~/images/" + "/" + fileName + extension))
            Me.SqlDataSource1.UpdateParameters("image_name").DefaultValue = fileName + extension
        Else
            ' Me.SqlDataSource1.UpdateParameters("image_name").DefaultValue=
        End If
    End Sub
 
    
    Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs)
        '取得图片名称
        Dim imageName As String = GridView1.DataKeys(e.RowIndex).Values("image_name").ToString()
        'customer.delete(GridView1.DataKeys(e.RowIndex).Values(0).ToString())
        'FillCustomerInGrid()
        'test
        'Response.Write(delimg)
        'problem is here
        Dim path As String = Server.MapPath("~/images") + imageName
        File.Delete(path)
    End Sub
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="id" DataSourceID="SqlDataSource1" 
            EmptyDataText="没有可显示的数据记录。" AllowPaging="True" AllowSorting="True" 
            CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCommand="GridView1_RowCommand">
            <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
            <Columns>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
                    ShowSelectButton="True" />
                <asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" 
                    SortExpression="id" />
                <asp:TemplateField>
                    <EditItemTemplate>
                        <asp:Image ID="Image2" runat="server" ImageUrl='<%# "images/" + DataBinder.Eval(Container.DataItem, "image_name") %>' />
                        <asp:FileUpload ID="FileUpload1" value="img.jpg" runat="server"  />

                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Image ID="Image3" runat="server" ImageUrl='<%# "images/" + DataBinder.Eval(Container.DataItem, "image_name") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                
            </Columns>
            <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
            <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
            <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="White" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:deareConnectionString1 %>" 
            DeleteCommand="DELETE FROM [Table1] WHERE [id] = @id" 
            InsertCommand="INSERT INTO [Table1] ([id], [image_name]) VALUES (@id, @image_name)" 
            ProviderName="<%$ ConnectionStrings:deareConnectionString1.ProviderName %>" 
            SelectCommand="SELECT [id], [image_name] FROM [Table1]" 
            UpdateCommand="UPDATE [Table1] SET [image_name] = @image_name WHERE [id] = @id">
            <DeleteParameters>
                <asp:Parameter Name="id" Type="String" />
            </DeleteParameters>
            <InsertParameters>
                <asp:Parameter Name="id" Type="String" />
                <asp:Parameter Name="image_name" Type="String" />
            </InsertParameters>
            <UpdateParameters>
                
                <asp:Parameter Name="id" Type="String" />
                <asp:Parameter Name="image_name" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
        <br />
    
    </div>
    </form>
</body>
</html>
--------------------编程问答-------------------- 查看 File.Delete(path) //放断点看看path路径是否正确。 --------------------编程问答-------------------- 估计是路径问题呀,如果路径正确,因该可以删掉的! --------------------编程问答-------------------- File类,根据路径删除文件 --------------------编程问答-------------------- Dim path As String = Server.MapPath("~/images") + imageName 


在 images  后面是不是应该加个"/"啊???


粗心,呵呵 --------------------编程问答-------------------- Dim path As String = Server.MapPath("~/images/") + imageName  --------------------编程问答-------------------- 然后还要确定你的imageName包含了文件后缀名 --------------------编程问答-------------------- 建议楼主还是自己调试一下。是不是逻辑没有搞的清楚? --------------------编程问答-------------------- Dim path As String = Server.MapPath("~/images/") + imageName  --------------------编程问答-------------------- 确定不是路径问题?


如果确实不是路径问题, 去检查文件系统权限。 --------------------编程问答-------------------- 路径错误 --------------------编程问答-------------------- string path=server.Mappath("File/")+filename;
if(File.Exists(path))
{
File.Delete(path);
} --------------------编程问答-------------------- 11楼的做法很好  应该先判断下 有了删没有就不删 

你的问题我以前也遇到过 如果确认了代码没问题 那除了路径问题就是文件夹的访问权限问题 --------------------编程问答-------------------- 谢谢各位大虾热心的回复, 我出去了几天今天才回来. 

我改了代码如下, 但还是不行:

    Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs)
       
        '取得图片名称
        Dim imagename As String = (TryCast(GridView1.Rows(e.RowIndex).FindControl("HyperLink1"), HyperLink)).Text
        'problem's here
        Dim path As String = Server.MapPath("~/images/") + imagename
        If File.Exists(path) Then
            File.Delete(path)
        End If

    End Sub

可以确定:
1, 路径没有问题, 因为我UPLOAD时就这个路径, 请看一楼代码; 
2, IMAGENAME 有后缀名; 
3, 文件权限也OK.

可就是删不掉文件.....痛哭......

想请教一下, 有没有什么方法可以在删文件前来测式权限与路径是否正确?

--------------------编程问答-------------------- Dim imagename As String = (TryCast(GridView1.Rows(e.RowIndex).FindControl("HyperLink1"), HyperLink)).Text 

HyperLink1这个控件在哪里呢?在你贴的代码中没看到呢! --------------------编程问答-------------------- 复14楼, 
有这人控件, 
                    <ItemTemplate>
                        <asp:Image ID="Image3" runat="server" ImageUrl='<%# "images/" + DataBinder.Eval(Container.DataItem, "image_name") %>' />
                       
                        <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("image_name") %>' 
                            Visible="true"></asp:HyperLink>
                       
                    </ItemTemplate>

上面的可能忘了贴
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,