[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 440
  • Last Modified:

get file names of directory

Hi,

I am using C with Visual Studio 2010. I need help to get file names of directory. Can anyone please help me how to get file names of directory.

Thanks
0
Johny12345
Asked:
Johny12345
  • 4
  • 4
  • 3
1 Solution
 
AndyAinscowFreelance programmer / ConsultantCommented:
This is what you wanted:
http://msdn.microsoft.com/en-us/library/07wt70x2%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

Directory::GetFiles(path) Method - retrieves the files in a directory supplied to the method.
0
 
ZoppoCommented:
Hi Johny12345,

you can use FindFirstFile and FindNextFile from Win API like i.e. demonstrated here: http://cboard.cprogramming.com/windows-programming/83267-msdn-example-code-findfirstfile-findnextfile.html

Hope that helps,

ZOPPO
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
ps.  It has an example program there demonstrating the usage
0
Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

 
AndyAinscowFreelance programmer / ConsultantCommented:
Note - my comment uses C++.net (one of your tags), the comment from Zoppo is using classical C (not .NET)
0
 
Johny12345Author Commented:
I have used code like this but it is not taking directory properly, can anyone help me please

void getFiles(char *address)
{
 printf(address );  // this line is showing strange characters
 WIN32_FIND_DATA FindFileData;
   HANDLE hFind = INVALID_HANDLE_VALUE;
   DWORD dwError;
   LPSTR DirSpec;
   size_t length_of_arg;
 
 
   DirSpec = (LPSTR) malloc (BUFSIZE);
    
   // Check for command-line parameter; otherwise, print usage.
   if(argc != 2)
   {
      printf("Usage: Test <dir>\n");
      return 2;
   }
 
   // Check that the input is not larger than allowed.
   StringCbLength(argv[1], BUFSIZE, &length_of_arg);
   if (length_of_arg > (BUFSIZE - 2))
   {
      printf("Input directory is too large.\n");
      return 3;
   }

.
.
.
.
.
.
.

}

Open in new window

0
 
ZoppoCommented:
Could you post the code where you call the function?
0
 
Johny12345Author Commented:
it is bit difficult to post all code because it too big but I am posting related code here:

int main(int argc, char *argv[])
{

char* directory_path;

directory_path = (char*) malloc(strlen(argv[2])+4);
getFiles(TEXT(directory_path));

}

Open in new window

0
 
ZoppoCommented:
Well, the directory_path is allocated but the data it points to is uninitialized.

IMO you don't need to allocate a string at all, you can simply call something like:

if ( argc > 2 )
{
 getFiles( argv[2] );
}

ZOPPO
0
 
Johny12345Author Commented:
thanks it worked. Is it possible to put names in dynamic array? Do I need to open another question for it?
0
 
Johny12345Author Commented:
great.. thanks
0
 
ZoppoCommented:
Hi,

you're welcome, I'm glad I could help.

About dynamic array: I guess you want to be able to return the list of found filenames to the calling function, right?

Using a C-Array in this case (usually with pointer to pointer, i.e. char**) is IMO not the best solution since you don't know the number of entries, i.o.w. you don't know how many char* you need to allocate which means you'll have to realloc the buffer repeatedly.

Maybe a better idea would be to implement some simple linked list, if needed it's easy to move it into an array afterwards with only one allocation.

Do you know how to implement a simple single linked list in C?

BTW: Just to go sure I would like to ask if you are really using plain C or if you even could use C++, many things are much easier with C++ and STL, with other libraries like i.e. BOOST you can do what you need really simpel (beside the fact if it's new for you you'll have to invest quite some time to get familiar with it).

ZOPPO
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 4
  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now