Rcutils: 计算指定目录的大小(包括子目录)

创建于 2020-10-27  ·  13评论  ·  资料来源: ros2/rcutils

rcutils_calculate_directory_size() 只支持不递归计算目录大小。
为什么 rcutils_calculate_directory_size() 不支持递归?
有什么原因吗?

所有13条评论

我什么都没想到,但我相信如果它递归工作会很好。

rcutils_calculate_directory_size当前用于计算rosbag2 元数据。 由于目录中的所有文件,它现在不必是递归的。

rcutils_calculate_directory_size 当前用于计算 rosbag2 元数据。 由于目录中的所有文件,它现在不必是递归的。

是的。 现在只有 rosbag2 中的metadata_io.cpp调用了这个函数。

它明确描述它不支持递归搜索。 我们是否需要它与实际用例递归?

它明确描述它不支持递归搜索。 我们是否需要它与实际用例递归?

是的。 rosbag2 中的当前实现如下

https://github.com/ros2/rosbag2/blob/700817c42f1bbc26ced79aca2186094350c8d1be/rosbag2_storage/src/rosbag2_storage/metadata_io.cpp#L229 -L240

它只计算指定路径中文件的总大小。 对于 sqlite3 数据库(现在 rosbag2 只提供这个作为存储后端),没关系,因为 sqlite3 数据库是一个文件。 但是对于其他人(例如leveldb),它使用目录来保存数据。 以上代码无法获得正确的数据库大小。
我想更新这个函数来支持递归。
此修改不应为当前代码引入问题。

我想更新这个函数来支持递归。
此修改不应为当前代码引入问题。

是的,我认为增强它来做到这一点没有问题。 我们可能想在函数中引入一个recursive布尔参数,以防调用者真的不希望这样做,否则这对我来说听起来不错。

@clalancette
抄送:@Barry-Xu-2018

感谢您的评论!
实际上我们一直在尝试使用leveldb作为 rosbag2 后端数据库。 要做到这一点,这种增强是必要的。

@clalancette @fujitatomoya

我们可能想在函数中引入一个递归布尔参数,以防调用者真的不希望这样做,否则对我来说听起来不错。

如果增加一个新的参数,在更新rcutils之后,我们应该同时更新rosbag2。 否则,rosbag2 构建失败。

我在Linux平台上测试过。 但需要在window平台上进行测试。
现在我正在准备窗口环境。

如果增加一个新的参数,在更新rcutils之后,我们应该同时更新rosbag2。 否则,rosbag2 构建失败。

我也不喜欢这种方法。 我们可以保留界面并增强递归搜索的功能。 如果有任何非递归搜索的特定用例,我们可以为递归案例添加新功能。

我也不喜欢这种方法。 我们可以保留界面并增强递归搜索的功能。 如果有任何非递归搜索的特定用例,我们可以为递归案例添加新功能。

是的。 同意。

@clalancette

我们在没有新参数的情况下增强 rcutils_calculate_directory_size 怎么样?
目前,rosbag2 可以正确使用增强的 rcutils_calculate_directory_size()。

我们在没有新参数的情况下增强 rcutils_calculate_directory_size 怎么样?
目前,rosbag2 可以正确使用增强的 rcutils_calculate_directory_size()。

我担心这个的原因是用户之间有一些关于在 rosbag2 目录中存储“附加”信息的讨论。 如果他们最终在子目录中存储了大量额外的数据,这可能会影响 rosbag2 所期望的大小。

如果我们不想破坏 API,我们还可以添加另一个函数rcutils_calculate_directory_size_recursive()

ping @Karsten1987以了解是否总是在rcutils_calculate_directory_size()中进行递归搜索会导致 rosbag2 出现问题。

@clalancette

我理解你的担忧。
我检查了代码。 只有 rosbag2 中的以下代码使用此功能。

https://github.com/ros2/rosbag2/blob/700817c42f1bbc26ced79aca2186094350c8d1be/rosbag2_storage/src/rosbag2_storage/metadata_io.cpp#L229 -L240

更改代码后,我也尝试使用默认 sqlite3 存储插件的 rosbag2 并没有发现问题。
当然,我们应该听听@Karsten1987 的意见。

@Barry-Xu-2018

我想你可以关闭这个。

306合并。 所以关闭这个问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

EricCousineau-TRI picture EricCousineau-TRI  ·  22评论

windelbouwman picture windelbouwman  ·  7评论

talha-asad picture talha-asad  ·  3评论

ziram picture ziram  ·  3评论

nathanejohnson picture nathanejohnson  ·  3评论