4

I want to read in a text file but I only know a part of the filename. To be more specific, the format of the file is "FOO_yyyymmdd_hhmmss.txt" but when running my program, I will only know "FOO_yyyymmdd_" and ".txt". In other words, I want to read that file based on just the date, ignoring the "hhmmss" (time) part for I will not know the time of that file, only the date.

Here is part of what I have so far:

ArrayList al = new ArrayList(); string FileName = "FOO_" + DateTime.Now.ToString("yyyymmdd") + "_" ; //how do I correct this, keeping in mind that I need the time as well? string InPath = @"\\myServer1\files\"; string OutPath = @"\\myServer2\files\"; string InFile = InPath + FileName; string OutFile = OutPath + @"faceOut.txt"; using (StreamReader sr = new StreamReader(InFile)) { string line; while((line = sr.ReadLine()) != null) { al.Add(line); } sr.Close(); } 

How can I read this file without knowing the whole string beforehand?

2 Answers 2

4

How about using a wildcard * available with DirectoryInfo.EnumerateFiles

string FileName = new DirectoryInfo(@"\\myServer1\files\") .EnumerateFiles(String.Format("FOO_{0:yyyymmdd}_*.txt", DateTime.Now)) .FirstOrDefault()?.FullName; 

FileName == null means that the file was not found

Note that the Null-Conditional Operator (?.) can only be used from C# 6.0 onwards

Sign up to request clarification or add additional context in comments.

Comments

3

Well, search for the files, then check that theres's only one file to read:

 var pathToSearch = @"\\myServer1\files\"; var knownPart = string.Format("FOO_{0:yyyymmdd}_", DateTime.Now); var files = Directory .EnumerateFiles(pathToSearch, knownPart + "??????.txt") .Where(file => Regex.IsMatch( Path.GetFileNameWithoutExtension(file).Substring(knownPart.Length), "^(([0-1][0-9])|(2[0-3]))([0-5][0-9]){2}$")) .ToArray(); if (files.Length <= 0) { // No such files are found // Probably, you want to throw an exception here } else if (files.Length > 1) { // Too many such files are found // Throw an exception or select the right file from "files" } else { // There's one file only var fileName = files[0]; ... } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.