【问题标题】:How to fetch list of files from path如何从路径中获取文件列表
【发布时间】:2017-05-12 06:09:47
【问题描述】:

我有一个用于从路径中获取文件列表的代码。我正在尝试从名为 FileNamepath 的路径中获取名为 Items 的文件列表。我使用了 for-loop 来获取单个文件。我需要合并所有这些单独的文件并将其放入字符串 [] 文件名中(文件应在列表中)。任何人都可以建议我正确的做法。

谢谢

if (Directory.Exists(FileNamePath))
{
    //con.Open(); 
    List<string> items = new List<string>();
    string qry="select FileName from MembersFiles where fk_MemberId='" + GlobalValues.Member_PkId + "' and Document_Type='" + doc + "'";
    using (SqlCommand cmd = new SqlCommand(qry, con))
    {
        cmd.CommandType = CommandType.Text;
        // con.Open();
        using (SqlDataReader objReader = cmd.ExecuteReader())
        {
            if (objReader.HasRows)
            {
                while (objReader.Read())
                {                       
                    string item = objReader.GetString(objReader.GetOrdinal("FileName"));
                    items.Add(item);  // List Of Files                      
                }
            }
        }
    }
    con.Close();

    string[] fileNames1;
    for (int i = 0; i < items.Count; i++)
    {
        fileNames1 = Directory.GetFiles(FileNamePath, items[i]); // Fetching individual files
    }
  //  String[] fileNames=   // here i need to put all files(list of files)

【问题讨论】:

    标签: c# arrays winforms list


    【解决方案1】:

    试试

    string [] fileEntries = Directory.GetFiles(path);
            foreach(string fileName in fileEntries)
                ProcessFile(fileName);
    

    查看https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

    【讨论】:

      【解决方案2】:

      这是一个 Linq 重构:

              if (Directory.Exists(FileNamePath))
              {
                  List<string> dbFileNames = null;
                  string qry = "select FileName from MembersFiles where fk_MemberId='" + GlobalValues.Member_PkId + "' and Document_Type='" + doc + "'";
                  using (SqlDataAdapter da = new SqlDataAdapter(qry, con))
                  {
                      con.Open();
                      DataTable dt = new DataTable();
                      da.Fill(dt);
                      dbFileName = dt.Rows.OfType<DataRow>()
                          .Select(r => r[0].ToString()).ToList();
                      con.Close();
                  }
                  string[] fileNames1 = dbFileNames.Select(f =>
                  Path.Combine(FileNamePath, f)).ToArray();
              }
      

      【讨论】:

      • 感谢您的回复。但它没有获取任何文件并且 count=0
      • 您能否在FileName 列中显示示例数据?我遵循您的逻辑,理论上您的代码也无法获取任何文件。
      • 文件名由一个图像文件组成,例如 LoanForm_Penguins.jpg
      • 非常感谢 Lei Yang..在对您的代码进行一些修改后,它工作正常。
      【解决方案3】:

      Directory.GetFiles() 方法将为您提供文件路径列表,并且您只想获取文件名,因此您必须执行以下操作:

      var fileEntries = Directory.GetFiles(path)
                                       .Select(x=>Path.GetFileName(x));
      

      如果您需要获取不带扩展名的文件名,也可以尝试Path.GetFileNameWithoutExtension()

      【讨论】:

      • 感谢您的评论。但我的要求是仅从文件名路径中获取名为“items”的列表中存在的那些文件。
      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2018-03-02
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多