【问题标题】:How to recursively search directory in C++/CLI如何在 C++/CLI 中递归搜索目录
【发布时间】:2011-10-26 16:58:05
【问题描述】:

搜索递归搜索的 Windows 示例,我找到了 this,但尝试使用 cl(和 MSVC++ 工具链)编译它时,编译器指出错误大于错误。如果我不使用 MSVC++ GUI 完成的常规设置,是否需要直接包含一些额外的库。

发布的示例错误代码已翻译,因此看起来可能与英文不完全相同。

"*": This referencing cannot be done for System::String the compiler substitutes "*" by 
"^" to continue analysis

System::String ^ a system-owned array cannot contain this managed type

这两个错误都在这一行

String* directories[] = Directory::GetDirectories(dir.c_str()); //dir is a usual string

因此不是我的编码。

我在搞砸什么?

编译行是:

cl /w /c /clr file.cpp

【问题讨论】:

  • 该代码是用“C++ 托管扩展”语法编写的,但您正在编译为 C++/CLI —— 两种不同的语言,当然它不会工作。
  • @ildjarn:它是 C++/CLI,只需查看它、查看错误消息和编译器调用即可。它与 C++ 没有真正的关系。
  • @Sim:那你为什么要尝试使用 C++/CLI?如果您习惯于 C 或 C++,那么请坚持使用 C 或 C++。仅仅因为您使用的是 Windows 并不意味着您必须以 .NET 为目标
  • @ildjarn:该行在 C++/CLI 中是错误的,编译器在抱怨(这就是 OP 提出这个问题的原因)。较新的VS版本不支持C++的托管扩展,我认为OP使用旧版本的机会很小,如果她这样做了,她可能会知道她在做什么。
  • @Sim :如果您想坚持使用跨平台 C++,请参阅 Boost.Filesystem

标签: windows c++-cli managed-c++


【解决方案1】:

Directory::GetDeirectories 是一个 .net 调用,因此它将返回一个 .net 对象。您正在尝试将其转换为 c++ 指针。最好的办法是声明一个 .net 字符串数组。类型是这样的

array<String^>^ directories = Directory::GetDirectories(dir.c_str());

【讨论】:

  • 我真的很想以某种方式遵循微软提供的指南,而不是陷入另一种语言。
  • 嗯,我有点困惑。如果您使用的是 CLI c++,那么上面的答案是正确的。但是,如果您正在寻找交叉兼容性,您可能应该查看 c++ 的本机函数
  • 嗯,我的目标是(就像上面的 cmets 中所述)编写一个小的 Windows 兼容代码来遍历文件夹并查找特定的文件类型。我不是故意使用这些东西,只是在谷歌中得到了它,尝试了一下,编译器真的很困惑,以为我错过了一个编译选项。
猜你喜欢
  • 2010-12-01
  • 2016-12-01
  • 1970-01-01
  • 2016-09-06
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2011-08-15
相关资源
最近更新 更多