0

I need to be able to open a file when i only know part of the file name. i know the extension but the filename is different every time it is created, but the first part is the same every time.

miles
  • 3
  • 2
  • 4
    Couple things: first of all, please mention (and tag) your platform (Windows, Mac, iOS, etc etc)-- file operations are often platform dependent. Secondly, please say more about your workflow here, and whether you're creating the file, or how you would conceptually search for it, etc. – Ben Zotto Feb 25 '11 at 22:50

4 Answers4

4

You'll (probably) need to write some code to search for files that fit the known pattern. If you want to do that on Windows, you'd use FindFirstFile, FindNextFile, and FindClose. On a Unix-like system, opendir, readdir, and closedir.

Alternatively, you might want to consider using Boost FileSystem to do the job a bit more portably.

Jerry Coffin
  • 476,176
  • 80
  • 629
  • 1,111
1

On a Unix-like system you could use glob().

#include <glob.h>
#include <iostream>

#define PREFIX "foo"
#define EXTENSION "txt"

int main() {
    glob_t globbuf;

    glob(PREFIX "*." EXTENSION, 0, NULL, &globbuf);
    for (std::size_t i = 0; i < globbuf.gl_pathc; ++i) {
      std::cout << "found: " << globbuf.gl_pathv[i] << '\n';
      // ...
    }
    return 0;
}
Bertrand Marron
  • 21,501
  • 8
  • 58
  • 94
1

Use Boost.Filesystem to get all files in the directory and then apply a regex (tr1 or Boost.Regex) to match your file name.

Some code for Windows using Boost.Filesystem V2 with a recursive iterator :

#include <string>
#include <regex>
#include <boost/filesystem.hpp>
...
...
std::wstring parent_directory(L"C:\\test");
std::tr1::wregex rx(L".*");

boost::filesystem::wpath parent_path(parent_directory);
if (!boost::filesystem::exists(parent_path)) 
    return false;

boost::filesystem::wrecursive_directory_iterator end_itr; 
for (boost::filesystem::wrecursive_directory_iterator itr(parent_path);
    itr != end_itr;
    ++itr)
{
    if(is_regular_file(itr->status()))
    {
        if(std::tr1::regex_match(itr->path().file_string(),rx))
            // Bingo, regex matched. Do something...
    }
}

Directory iteration with Boost.Filesystem. // Getting started with regular expressions using C++ TR1 extensions // Boost.Regex

anno
  • 5,970
  • 4
  • 28
  • 37
0

I think you must get list of files in a directory - this [link] will help you with it. After that, I think will be quite easy to get a specific file name.

Community
  • 1
  • 1
Evgeny Gavrin
  • 7,627
  • 1
  • 22
  • 27