Click here to Skip to main content
15,881,938 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hello, I made a code that saves files name as a string for all files that exist in the same directory and iterate to print every file, but I want the function to print the file name in the subdirectories also.

What I have tried:

Code:-
C++
static void listfiles(string boost) {

	WIN32_FIND_DATA data;
	HANDLE hFind = FindFirstFile("C:/Users/zurghni/source/repos/Project13/Debug/grko/gslp/*", &data);      // DIRECTORY

	if (hFind != INVALID_HANDLE_VALUE) {
		do {
			std::cout << data.cFileName << std::endl; //prints files names in the directory
			system("puase");
		} while (FindNextFile(hFind, &data));
		FindClose(hFind);
	}
}
Posted
Updated 25-May-22 8:51am
v2
Comments
enhzflep 7-Jan-21 16:54pm    
Okay, fine. So what do you want to know?
You ahhh, you forgot to ask a question....
MohammedZr 7-Jan-21 16:56pm    
I want to know how can I get the names of files in the subdirectories of a folder
for example, I have another folder inside the ``gslp`` folder that contains a bunch of files how can I get their names ?? and print them
enhzflep 7-Jan-21 17:02pm    
Same way you got the names for this folder. I suspect, you're trying to tell which of the entries in the current folder are directories, and from there, list their contents as well.
Am I correct in thinking that the current barrier is determining which of the entries in the current directory are directories themselves?

Listing the Files in a Directory - Win32 apps | Microsoft Docs[^]

You have to check the Attribute and append new directory name in
ffd.cFileName
to path and call FindFirst again.

C
// A TCHAR based std::string
typedef std::basic_string<TCHAR> tstring;

using namespace std;

void printfiles(tstring inputstr)
{
	TCHAR szDir[MAX_PATH];
	tstring seachstr = inputstr + TEXT("\\*");
	wcscpy_s(szDir, MAX_PATH, seachstr.c_str());

	// Find the first file in the directory.
	WIN32_FIND_DATA ffd;
	HANDLE hFind = FindFirstFile(szDir, &ffd);

	if (INVALID_HANDLE_VALUE == hFind) {
		_tprintf(TEXT("Error FindFirstFile\n"));
		return;
	}

	// List all the files in the directory with some info about them
	do {
		if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			if (!_tcscmp(ffd.cFileName, TEXT(".")) || 
			   !_tcscmp(ffd.cFileName, TEXT(".."))) continue;
			tstring dirstr = inputstr + TEXT("\\") + ffd.cFileName;
			_tprintf(TEXT("  %s   <DIR>\n"), dirstr.c_str());
			printfiles(dirstr);
		}
		else {
			LARGE_INTEGER filesize;
			filesize.LowPart = ffd.nFileSizeLow;
			filesize.HighPart = ffd.nFileSizeHigh;
			_tprintf(TEXT("  %s   %lld bytes\n"), 
			   ffd.cFileName, filesize.QuadPart);
		}
	} while (FindNextFile(hFind, &ffd) != 0);

	DWORD dwError;
	dwError = GetLastError();
	if (dwError != ERROR_NO_MORE_FILES) {
		_tprintf(TEXT("Error while FindFile\n"));
	}

	FindClose(hFind);
}
 
Share this answer
 
v3
Comments
MohammedZr 8-Jan-21 0:09am    
what about the subdirectories?
MohammedZr 8-Jan-21 8:19am    
This is not clear!Enough any help
If you can use C++17, you can do this in a platform-independent way using filesystem[^]. The function ListFiles in this .cpp[^] should give you an idea how to use it. It creates a list of the paths to all files in a specified directory but avoids subdirectories. You can change the logic to call the function recursively if you want to include files in subdirectories.
 
Share this answer
 
Comments
Richard Deeming 26-May-22 3:50am    
The OP hasn't posted anything since last August, so don't hold your breath waiting for a reply. :)
Greg Utas 26-May-22 5:57am    
I hope somebody finds it useful. :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900