0

我有一个名为 mama 的文件。此文件包含名为 child1 child2 和 child3 的 3 个文件。child1 包含 5 个 txt,child2 包含 7 个 txt,child3 包含 4 个 txt。妈妈的路径是 C:\Users\John\Desktop\mama 。对不起我的写作方式,但我试图准确地解释我的情况。我的目标是找到所有这些 txt(16 个)的路径,这样我就可以用它们做事了。所以我认为一个函数可以找到这个路径并将它们放在一个链表中

struct paths
{
   string pathName;
   paths *next;
};

正是我需要一一使用它们的。我找到了一些关于 FindFirstFile() 和 FindNextFile() 的示例,我还尝试运行一些代码,以便通过一些测试来了解它是如何工作的,但是错误不断出现,禁止进行测试和理解的机会。顺便说一句,我使用 Visual Studio 2008(这是他们说我们应该使用的,所以我想我无法更改它)。如果有人可以帮助我理解或获得任何可以提供一些好的且易于理解的示例的链接,我将非常感激。

编辑:

例如使用此代码

#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

    int main()
    {
        WIN32_FIND_DATA fData;
        void * handle = FindFirstFile( "C:/Users/John/Desktop/*", &fData );//<~~~error
        cout << fData.cFileName;
        system("pause");
    }

有 1 个错误:错误 1 ​​错误 C2664:“FindFirstFileW”:无法将参数 1 从“const char [24]”转换为“LPCWSTR”

4

1 回答 1

2

首先,您应该声明一个 WIN32_FIND_DATA 结构

然后在目录中找到第一个文件(即 C:/Users/John/Desktop/* )

paths * head;
WIN32_FIND_DATA fData;
void * handle = FindFirstFile( "C:/Users/John/Desktop/*", &fData );

检查它是否是您要使用的文件:

fData.cFileName // the file name is stored here ( ie C:/Users/John/Desktop/child2.txt )

您可以循环执行此操作:

while( !CheckFileNameHere( fData.cFileName, head->pathname ) ) FindNextFile( handle, &fData );

增加列表:

head = head->next;

或完成:

CloseHandle( handle );

如何获得路径取决于您。如果您已将它们存储在文件中,请使用 stdio.h、iostream 或 windows.h 中的函数。如果你把它写成一个函数,你可以将它重用于你拥有的任何文件名。

如果您在使用这些方法时遇到运行时错误,您应该发布确切的错误,以便我们找出它们不起作用的原因。编译错误也是如此。

于 2013-04-16T23:43:36.757 回答