Hi!
HERE IS MY PROBLEM
==============
I'm interested in a function that opens for editing, then saves and closes in turn all the files in C:\DIRECTORY\
WHY THAT PROBLEM
=============
The C:\DIRECTORY\ contains text files *.txt whose content should undergo some changes (that pertains to ALL THE FILES IN C:\DIRECTORY\). So I should open each file, edit, save and then close it. Everything is clear to me when dealing with concrete files but I have no idea of how to go through the unknown list of files in C:\DIRECTORY\.
Thanks in advance for any hint!

Recommended Answers

All 5 Replies

The functions FindFirstFile() and FindNextFile() will iterate the all the files and sub-directories. For each file they return a structure that contains the filename, attributes, size and other data. Check the file's attributes to see that it is a normal file and, if it is, your program can open and edit it.

Thanks Ancient Dragon for your answer. As for FindFirstFile() and FindNextFile(), could you please tell me which C++ library should be included in order for the two functions to be available? I was not able to find them in C++ Builder but that doesn't mean they do not exist at all.
Thanks again!

Member Avatar for iamthwee

Thanks Ancient Dragon for your answer. As for FindFirstFile() and FindNextFile(), could you please tell me which C++ library should be included in order for the two functions to be available? I was not able to find them in C++ Builder but that doesn't mean they do not exist at all.
Thanks again!

Does it support <windows.h>

If not, dev-cpp from bloodshed definitely does.

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

int main()
{
    HANDLE hFind;
    WIN32_FIND_DATA FindData;
    int ErrorCode;
    BOOL Continue = TRUE;

    cout << "A decent FindFirst/Next demo." << endl << endl;

    hFind = FindFirstFile("C:\\*.txt", &FindData);

    if(hFind == INVALID_HANDLE_VALUE)
    {
        ErrorCode = GetLastError();
        if (ErrorCode == ERROR_FILE_NOT_FOUND)
        {
            cout << "There are no files matching that path/mask\n" << endl;
        }
        else
        {
            cout << "FindFirstFile() returned error code " << ErrorCode << endl;
        }
        Continue = FALSE;
    }
    else
    {
        cout << FindData.cFileName << endl;
        
    }

    if (Continue)
    {
        while (FindNextFile(hFind, &FindData))
        {
            cout << FindData.cFileName << endl;
            
        }

        ErrorCode = GetLastError();

        if (ErrorCode == ERROR_NO_MORE_FILES)
        {
            cout << endl << "All files logged." << endl;
        }
        else
        {
            cout << "FindNextFile() returned error code " << ErrorCode << endl;
        }

        if (!FindClose(hFind))
        {
            ErrorCode = GetLastError();
            cout << "FindClose() returned error code " << ErrorCode << endl;
        }
    }

   
    cin.get();
}

Thanks Ancient Dragon for your answer. As for FindFirstFile() and FindNextFile(), could you please tell me which C++ library should be included in order for the two functions to be available? I was not able to find them in C++ Builder but that doesn't mean they do not exist at all.
Thanks again!

You will also need to read the Microsoft docs for those functions -- here

Thanks a lot friends! Both findfirst and findnext functions are introduced by dir.h (The Borland versions don't end with "File")

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.