首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++ CLI循环遍历所有系统文件和文件夹

使用C++ CLI循环遍历所有系统文件和文件夹
EN

Stack Overflow用户
提问于 2011-04-04 10:28:59
回答 2查看 2.1K关注 0票数 0

我发现C#代码可以遍历我们指定的任何目录,我试图将它转换为C++/CLI,并让它遍历所有的系统文件和文件夹。问题是代码让你确定需要扫描的深度级别!我需要的是让它循环所有文件和文件夹,不管深度.我就是这么做的..。有一些例外!

代码语言:javascript
复制
#include "stdafx.h"

using namespace System;
using namespace System::IO;

ref class Scan {
public:
    static int MaxPath=260000000;

    static void ScanMyDir( String^ SourceDir,int RecursiveLevel) {
        if(RecursiveLevel<=MaxPath) {
            array <String^> ^fileEntries = Directory::GetFiles(SourceDir);
            for each (String^ fileName in fileEntries) {
                Console::WriteLine(fileName);
            }
        }
        array<String^> ^SubDirEntries = Directory::GetDirectories(SourceDir);
        for each (String^ subdir in SubDirEntries)
            if ((File::GetAttributes(subdir) & FileAttributes::ReparsePoint)!= FileAttributes::ReparsePoint)
                ScanMyDir(subdir,RecursiveLevel+1);
    }
};

int main(array<System::String ^> ^args) {
    Scan::ScanMyDir("c://",1);
    Console::Read();
    return 0;
}

经过一些修改(仍然有一些错误):

代码语言:javascript
复制
using namespace System;
using namespace System::IO;

static void ScanMyDir( String^ SourceDir) {
    array <String^> ^fileEntries = Directory::GetFiles(SourceDir);
    for each  (String^ fileName in fileEntries) {
        Console::WriteLine(fileName);
    }
    array<String^> ^SubDirEntries = Directory::GetDirectories(SourceDir);
    for each (String^ subdir in SubDirEntries)
        if ((File::GetAttributes(subdir) & FileAttributes::ReparsePoint)!= FileAttributes::ReparsePoint)
            ScanMyDir(subdir);
}

int main(array<System::String ^> ^args) {
    try {
        ScanMyDir("C://Windows"); 
    }
    catch {
        Console::WriteLine("Some Denied files or Folders");
    }
    return 0;
}

这些都是错误:

错误1错误C2059:语法错误:'{‘c:\Users\Ahmed\ 2010\Projects\eeee\eeee\eeee.cpp \visual studio 2010\Projects\eeee\eeee\eeee.cpp 31

错误6错误C2059:语法错误:'}‘c:\Users\Ahmed\documents\visual studio 2010\Projects\eeee\eeee\eeee.cpp 37

错误8错误C2059:语法错误:'}‘c:\Users\Ahmed\documents\visual studio 2010\Projects\eeee\eeee\eeee.cpp 37

错误5错误C2059:语法错误:‘返回’c:\Users\Ahmed\documents\visual studio 2010\Projects\eeee\eeee\eeee.cpp 36

错误4错误C2061:语法错误:标识符'WriteLine‘c:\Users\Ahmed\ 2010\Projects\eeee\eeee\eeee.cpp \visual studio 2010\Projects\eeee\eeee\eeee.cpp 32

错误7错误C2143:语法错误:缺失';‘之前'}’c:\Users\Ahmed\documents\visual studio 2010\Projects\eeee\eeee\eeee.cpp 37

错误2错误C2309: catch处理程序需要一个括号大小的异常声明c:\Users\Ahmed\ 2010\Projects\eeee\eeee\eeee.cpp \visual studio 2010\Projects\eeee\eeee\eeee.cpp 31

错误3错误C2319:'catch‘必须后面跟着一个复合语句。缺少“{”c:\User\Ahmed\documents\visual studio 2010\Projects\eeee\eeee\eeee.cpp 32

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-04 10:35:46

如果删除了该代码的递归级别部分,则应该得到所需的内容。你提到了3个例外,但我没有看到任何东西说明它们是什么。

代码语言:javascript
复制
static void ScanMyDir( String^ SourceDir)
{
array <String^> ^fileEntries = Directory::GetFiles(SourceDir);
for each  (String^ fileName in fileEntries)
{
Console::WriteLine(fileName);
}
array<String^> ^SubDirEntries = Directory::GetDirectories(SourceDir);
for each (String^ subdir in SubDirEntries)
if ((File::GetAttributes(subdir) & FileAttributes::ReparsePoint)!= FileAttributes::ReparsePoint)
            ScanMyDir(subdir);
}
};
票数 2
EN

Stack Overflow用户

发布于 2011-04-04 12:21:10

为了爱所有神圣的事物,请不要使用递归。我回答了this question for C# here。向C++/CLI的转换是直接的。如果不想这样做,请将其编译到自己的程序集中(并可选择地将其压缩到您的程序集中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5537228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档