在Visual Studio Express中使用C ++比较2个目录

夏洛克·福尔摩斯

再会,

我有一个参考目录和一个目录。我想根据参考目录对目录进行比较。比较两个文件夹的内容。我将如何编写此代码?请帮忙。对你的帮助表示感谢。提前致谢。Bdw,我在Visual Studio Express中使用C ++。

巴马克·谢米拉尼(Barmak Shemirani)

对于C ++ / CLI:

我们需要#include <vcclr.h>转换C ++字符串和CLI字符串。更改为以下内容:

#include <vector> 
#include <string> 
#include <windows.h>

int get_files_and_folders(std::wstring dir, std::vector<std::wstring> &fullpath, std::vector<int> &filesize)
{
    if (!dir.size()) return 0;
    if (dir[dir.size() - 1] != '\\') dir += L"\\";

    WIN32_FIND_DATA find = { 0 };
    std::wstring wildcard = dir + L"*";
    HANDLE hfind = FindFirstFile(wildcard.c_str(), &find);
    if (hfind == INVALID_HANDLE_VALUE)
        return 0;

    do
    {
        std::wstring filename = find.cFileName;
        if (filename == L"." || filename == L"..")
            continue;
        std::wstring path = dir + filename;
        fullpath.push_back(path);
        filesize.push_back(find.nFileSizeLow);

        if (find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            get_files_and_folders(path, fullpath, filesize);

    } while (FindNextFile(hfind, &find));

    FindClose(hfind);
    return 1;
}

int compare_folders(std::wstring &dir1, std::wstring &dir2, std::wstring &result)
{
    std::vector<int> filesize1, filesize2;
    std::vector<std::wstring> path1, path2;

    if (!get_files_and_folders(dir1, path1, filesize1)) return 0;
    if (!get_files_and_folders(dir2, path2, filesize2)) return 0;

    //test
    for (unsigned i = 0; i < path1.size(); i++)
    {
        System::String^ s = gcnew System::String(path1[i].c_str());
        System::Diagnostics::Trace::WriteLine(s);
    }

    if (path1.size() != path2.size())
    {
        result += L"file + folder count doesn't match\n";
        return 0;
    }

    for (unsigned i = 0; i < path1.size(); i++)
    {
        std::wstring filename1 = path1[i];
        std::wstring filename2 = path2[i];

        filename1.erase(0, dir1.size() + 1);
        filename2.erase(0, dir2.size() + 1);
        if (filename1 != filename2)
        {
            result += L"filename doesn't match\n";
            return 0;
        }

        if (filesize1[i] != filesize2[i])
        {
            result += L"filesize doesn't match\n";
            return 0;
        }

        //todo:
        //open file by fullpath name and compare each bit by bit...?
    }

    result = L"match found\n";
    return 1;
}

现在您可以从CLI调用该函数

//In C++/CLI form: 
#include <vcclr.h>
String^ str1 = L"c:\\test1";
String^ str2 = L"c:\\test2";

//convert strings from CLI to C++
pin_ptr<const wchar_t> dir1 = PtrToStringChars(str1);
pin_ptr<const wchar_t> dir2 = PtrToStringChars(str2);
std::wstring result;

compare_folders(std::wstring(dir1), std::wstring(dir2), result);

//convert strings from C++ to CLI
System::String^ str = gcnew System::String(result.c_str());
MessageBox::Show(str);

ps,在前面的示例中,我包含了此内容,using namespace std;但不应包含在Forms中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Visual Studio 2012 Express中使用Dotfuscator

来自分类Dev

在Visual Studio中使用angular2

来自分类Dev

在C#中使用库(Visual Studio)

来自分类Dev

在Visual Studio 2010 Express中使用Moq框架

来自分类Dev

C ++ Visual Studio当前工作目录

来自分类Dev

是否可以在一个.exe中使用ClickOnce发布Visual Studio C#项目?

来自分类Dev

使用DataTable.Compute()方法比较C#Visual Studio中的两个变量

来自分类Dev

在Visual Studio中使用SkiaSharp

来自分类Dev

在Visual Studio中使用Winsock

来自分类Dev

在Visual Studio中使用Gallio

来自分类Dev

在Visual Studio 2013中使用libgit2 C API

来自分类Dev

Visual Studio工作目录

来自分类Dev

Visual Studio Express 2012和Typescript输出目录

来自分类Dev

如何在C ++中使用julia语言(Visual Studio)

来自分类Dev

如何从Visual Studio C ++项目中使用RTMPDump?

来自分类Dev

如何在Visual Studio(C#)中使用WebView功能

来自分类Dev

在Visual Studio C ++项目中使用cusp

来自分类Dev

如何从Visual Studio C ++项目中使用RTMPDump?

来自分类Dev

在Visual Studio中使用libuv编译简单的C ++项目

来自分类Dev

需要在Visual Studio(C#)中使用DLL的帮助

来自分类Dev

在 Visual Studio 2010 中使用 plsql 的 C#

来自分类Dev

使用Visual Studio 2013 Express进行QT

来自分类Dev

使用Visual Studio 2013(Express)增强功能

来自分类Dev

如何在C#Visual Studio 2010中使用另一个表单中的表单中的组件

来自分类Dev

如何在C ++中使用Boost库创建3个并行执行线程(在Visual Studio 2019中)?

来自分类Dev

Visual Studio调试c ++

来自分类Dev

Visual Studio for C#

来自分类Dev

使用Git时在Visual Studio 2013中设置超越比较

来自分类Dev

使用Git时在Visual Studio 2013中设置超越比较

Related 相关文章

热门标签

归档