将列表传递到目录

时间:2014-12-18 15:09:36

标签: c# asp.net

我目前正在开发一个用asp.net和c#开发的网站。我目前面临一个小问题。我使用以下代码返回来自数据库的文件位置列表。

public List<FileDetails> GetFiles()
{
    string userName = HttpContext.Current.User.Identity.Name;

    string sqlQuery = @"SELECT  FileName,
                                FileLocation
                        FROM    File
                        WHERE   UserName=@UserName";

    List<FileDetails> FileDetailsList = new List<FileDetails>();

    using (SqlConnection connection = new SqlConnection(Common.ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand(sqlQuery))
        {
            cmd.Parameters.AddWithValue("UserName", userName);
            cmd.Connection = connection;
            connection.Open();

            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    FileDetails f = new FileDetails();

                    f.FileName = reader["FileName"].ToString();
                    f.FileLocation = reader["FileLocation"].ToString();

                    FileDetailsList.Add(f);
                }
            }
        }
    }
    return FileDetailsList;
}

现在我需要将它们显示在不同页面上的gridview中。我使用以下代码来实现此目的

FileDetails info = new FileDetails();
    if (info.GetFiles() != null)
    {
        List<string> filePaths = Directory.GetFiles(info.FileLocation).ToList(); //Error is at this line
        List<FileDetails> files = new List<FileDetails>();
        foreach (string filePath in filePaths) 
        {
            string filename = Path.GetFileName(filePath);
            files.Add(new FileDetails()
            {
                FileName = filename,
                FileLocation = filePath
            });
        }
        GridView1.DataSource = info.GetFiles();
        GridView1.DataBind();
    }

问题是我一直收到错误System.ArgumentNullException: Value cannot be null. Parameter name: path有谁知道我哪里出错了?

如果我做Directory.GetFiles(@"C:\Test\Files").ToList();它的效果非常好。但客户端的要求是从数据库中获取文件位置路径。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

假设: info是一个类。 info.GetFiles()返回数据库中的记录列表。 (顶部的代码)

info.FileLocation在哪一点上设置?

确实

var filelist = info.GetFiles();
foreach(var f in filelist)
{
    List<string> filePaths = Directory.GetFiles(f.FileLocation).ToList();
    ...
}  

答案 1 :(得分:1)

您正在尝试从info.GetFilelocation获取文件位置,并且您已经创建了FileDetails的新对象,因此现在将存在与此对象关联的值,因此所有值都将为null。因此,您需要为此对象分配一些值,而不是访问FileLocation.May可能是这样的

FileDetails info = new FileDetails();
List<FileDetails> list=info.GetFiles();

而不是

List<string> filePaths = Directory.GetFiles(list[0].FileLocation).ToList();

同样,您可以遍历列表

foreach(FileDetails f in list)
List<string> filePaths = Directory.GetFiles(f.FileLocation).ToList();