【Uipath】如何获取指定文件夹下所有子文件夹和所有Excel表的文件名?

【Uipath】如何获取指定文件夹下所有子文件夹和所有Excel表的文件名?,第1张

解决方案 :使用递归算法进行遍历获取,什么是递归,简而言之就是自己调用自己的一种方法,关于递归算法自行百度。

本例通过递归方法来实现这一需求,输出所有文件夹路径,以及所有Excel文件名。

给定测试目录: C:\Users\admin\Desktop\递归查找,前提是我们不知道该指定文件夹下有多少个子文件夹以及子文件。

测试目录说明:

该目录下创建了需要测试的两级文件目录、以及按文件夹名创建的.txt .xlsx文件。

首先需要明确目的:根据文件目录、文件夹目录,输出所有文件夹名以及所有Excel文件名,因为无法获知目录深度,所以通过父文件夹层层遍历。

然后进行递归逻辑判断:

找整个递归的终止条件:递归应该在什么时候结束?

找返回值:应该给上一级返回什么信息?

本级递归应该做什么:在这一级递归中,应该完成什么任务?

递归逻辑思考:

1.递归应该在什么时候终止?

应该在所有文件夹遍历后无子文件夹存在时终止。

2.返回值:

子目录下文件及文件夹的长度(个数)

3.本级递归应该完成的任务:

①.判断目录下有无文件:如果有,进行遍历文件目录,判断文件扩展名,符合条件的打印输出。

②.判断目录下有无文件夹,如果有,遍历文件夹目录,打印输出文件夹名。

定义参数Path_Find,初始目录为:C:\Users\admin\Desktop\递归查找

Step1: 判断文件目录长度

if(length>0)不为空,遍历文件目录,判断文件扩展名,打印输出满足条件的文件名。循环结束后,判断文件夹目录;

else为空,判断文件夹目录。

Step2 :判断文件夹目录长度

If(length>0),不为空,遍历文件夹目录,打印子文件夹名。再进行调用自身,继续判断文件目录,不断遍历循环。

Else,为空,不 *** 作。

其中Invoke Workflow File调用自己时,参数Path_Find为子文件夹路径

补充说明:.NET有内置搜索方法,方法见微软官方文档 https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.getdirectories?view=netcore-3.1

Step1 :定义返回搜索文件数组和返回搜索文件夹数组

           【注意】该方法不保证返回值的排列顺序,支持通配符"?"和"*",但不支持正则表达式。

Step2 :遍历数组并打印

打印输出结果:

  可以发现返回值的排列顺序并不固定,如果需要按一定规则排序,请使用Sort方法。

如要提取“我的文档”下所有文件名,先定义一个名称,如Files

=FILES("C:\Users\用户名\Documents\"&"*.*")

然后比如A列是序号,B列是文件名,就在B2中输入公式:

=HYPERLINK("C:\Users\用户名\Documents\"&INDEX(Files,ROW(A1)),INDEX(Files,ROW(A1)))

下拉

输入某文件夹路径,遍历该文件夹及其子文件夹(包括子文件夹的子文件夹等),获取其中所有文件的函数:

/// <summary>

/// 查找指定文件夹下指定后缀名的文件

/// </summary>

/// <param name="directory">文件夹</param>

/// <param name="pattern">后缀名</param>

/// <returns>文件路径</returns>

public void GetFiles(DirectoryInfo directory, string pattern, ref List<string>fileList)

{

if (directory.Exists || pattern.Trim() != string.Empty)

{

try

{

foreach (FileInfo info in directory.GetFiles(pattern))

{

fileList.Add(info.FullName.ToString())

}

}

catch (System.Exception ex)

{

Console.WriteLine(ex.ToString())

}

foreach (DirectoryInfo info in directory.GetDirectories())//获取文件夹下的子文件夹

{

GetFiles(info, pattern, ref fileList)//递归调用该函数,获取子文件夹下的文件

}

}

}

使用实例:

List<string>FindResult = new List<string>()

GetFiles(new DirectoryInfo(@"C:\","*.*", ref FindResult) //获取C盘下的所有文件路径

GetFiles(new DirectoryInfo(@"\\192.168.1.107\Save"), "*.*", ref FindResult)//获取局域网上共享文件夹下的所有文件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11687133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存