?
Solved

Multiple File Extensions With FindFirstFile

Posted on 1998-10-30
3
Medium Priority
?
2,058 Views
Last Modified: 2013-12-03
I am using FindFirstFile() and FindNextFile() to search a directory for files.  I have now found that I need to search for more than one extension so is this possible from one FindFirstFile() or will I have to trawl through the directory twice ?  (I don't want to use *.* but will if I have to)
0
Comment
Question by:ssherlock
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 20

Expert Comment

by:Madshi
ID: 1415702
I'm using *.* is such cases. Though, try using "*.doc;*.txt". Perhaps it works...

Regards, Madshi.
0
 
LVL 13

Accepted Solution

by:
Mirkwood earned 400 total points
ID: 1415703
I can give you an answer but that is not the answer you want to  here. It is not possible to do it using FindFirstFile or FindFirstFileEx.

A function that might help you is PathMatchSpec. An exported function of the shell. Here is the documentation.

PathMatchSpec




BOOL PathMatchSpec(
    LPCTSTR pszFileParam,
    LPCTSTR pszSpec
    );



Searches a string using a DOS wild card match type. The string can be searched for a particular file extension, such as *.bmp, *.doc, and so on.

•Returns TRUE if the string matches, or FALSE otherwise.


pszFileParam

Address of the string to be searched.

pszSpec

Address of the file type for which to search.



Example:

#include <windows.h>
#include <iostream.h>
#include "Shlwapi.h"

void main( void )
{
      // String path name 1.
      char buffer_1[] = "C:\\Test\\File.txt";
      char *lpStr1;
      lpStr1 = buffer_1;

      // String path name 2.
      char buffer_2[] = "C:\\Test\\File.bmp";
      char *lpStr2;
      lpStr2 = buffer_2;

      // String path name 3.
      char buffer_3[] = "*.txt";
      char *lpStr3;
      lpStr3 = buffer_3;

      // String path name 4.
      char buffer_4[] = "C:\\Test\\File";
      char *lpStr4;
      lpStr4 = buffer_4;


      // Variable to get the return.
      // from "PathMatchSpec"      
    int      retval;      

      // Test path name 1.
    retval = PathMatchSpec(lpStr1,lpStr3);
    cout << "The contents of String 1: " << lpStr1
             << "\nThe return value from the function is " << retval << " = TRUE" << endl;

      // Test path name 2.
      retval = PathMatchSpec(lpStr2,"*.bmp");
    cout << "The contents of String 2: " << lpStr2
             << "\nThe return value from the function is " << retval << " = TRUE" << endl;

      // Test path name 4.
      retval = PathMatchSpec(lpStr4,lpStr2);
    cout << "The contents of String 4: " << lpStr4
             << "\nThe return value from the function is " << retval << " = FALSE"<< endl;
}
OUTPUT:
==========
The contents of String 1: C:\Test\File.txt
The return value from the function is 1 = TRUE
The contents of String 2: C:\Test\File.bmp
The return value from the function is 1 = TRUE
The contents of String 4: C:\Test\File
The return value from the function is 0 = FALSE

0
 

Author Comment

by:ssherlock
ID: 1415704
Thanks but that wasn't really acceptable for this project (I will keep it handy though).  I eneded up putting everything into a function and calling it twice, feeding in the extension to search for each time.
0

Featured Post

NFR key for Veeam Agent for Linux

Veeam is happy to provide a free NFR license for one year.  It allows for the non‑production use and valid for five workstations and two servers. Veeam Agent for Linux is a simple backup tool for your Linux installations, both on‑premises and in the public cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

zlib is a free compression library (a DLL) on which the popular gzip utility is built.  In this article, we'll see how to use the zlib functions to compress and decompress data in memory; that is, without needing to use a temporary file.  We'll be c…
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question