Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将列表传递到目录_C#_Asp.net - Fatal编程技术网

C# 将列表传递到目录

C# 将列表传递到目录,c#,asp.net,C#,Asp.net,我目前正在一个网站上工作,该网站正在asp.net和c中开发。我现在面临一个小问题。我使用下面的代码从数据库返回一个文件位置列表 public List<FileDetails> GetFiles() { string userName = HttpContext.Current.User.Identity.Name; string sqlQuery = @"SELECT FileName, File

我目前正在一个网站上工作,该网站正在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:值不能为null。 参数名称:路径有人知道我哪里出错了吗

如果我这样做的话。GetFiles@C:\Test\Files.ToList;它工作得非常好。但是客户端的要求是从数据库中获取文件位置路径

提前感谢您的帮助

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

info.FileLocation在哪一点设置

当然:

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

您正在尝试从info.GetFilelocation获取filelocation,并且您已经创建了FileDetails的新对象,因此现在将有与此对象关联的值,因此所有值都将为空。因此,您需要为此对象分配一些值,以便访问filelocation。可能是这样的情况

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();

GetFiles方法可能应该是静态的。这样就不需要创建FileDetails对象来调用它。但问题是,您没有从中捕获返回的列表,而且它也没有改变调用它的FileDetails对象。此外,如果您想在另一页上使用它,您应该将它保存在持久的位置。@juharr谢谢您的建议,这非常有用appreciated@PatrickHofman谢谢你的建议,非常感谢你的回答