2016-07-13 2 views
0

Я хотел бы постоянно читать во всех файлах изображений из папки на моем локальном диске, а затем выполнять некоторую обработку и завершать программу после того, как все изображения будут прочитаны. Номера изображений не являются последовательными, они случайны, однако они расположены в одной папке. В настоящее время моя программа может читать только в одном файле; см. код нижеКак постоянно читать файлы в папке с помощью C#?

string imagePath = Path.Combine(Freconfig.GetSamplesFolder(), "24917324.jpg"); 
+1

Использование Directory.GetFiles? – Ian

+1

Похоже, вы просто хотите [enumerate] (http://stackoverflow.com/q/5669617/1997232) каждый файл в каталоге, соответствующем '* .jpg'. – Sinatr

ответ

4

использование FileSystemWatcher https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx

FileSystemWatcher watcher = new FileSystemWatcher(); 
    watcher.Path = Freconfig.GetSamplesFolder(); 
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
     | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
    watcher.Filter = "*.jpg"; 

    // Add event handlers. 
    watcher.Changed += new FileSystemEventHandler(OnChanged); 
    watcher.Created += new FileSystemEventHandler(OnChanged); 
    watcher.Deleted += new FileSystemEventHandler(OnChanged); 
    watcher.Renamed += new RenamedEventHandler(OnRenamed); 

    // Begin watching. 
    watcher.EnableRaisingEvents = true; 

перед началом Бодрствующего использование directorylisting найти все существующие файлы и обрабатывать их, а затем использовать Watcher

+0

Я не уверен, что вы имеете в виду, используя каталог, чтобы найти все существующие файлы? Было бы лучше сделать мою обработку, прежде чем я начну наблюдать? –

+0

Когда вам нужно только выполнить все jpg в каталоге, то используйте то, что предлагает Mfusiki. – Ive

1

Вы можете попробовать:

directoryInfo = new DirectoryInfo("C:/YOUR/DIRECTORY/HERE]"); 
var files = directoryInfo.GetFiles("*.jpg").OrderBy(x => x.CreationTimeUtc); 
foreach (var file in files) 
{ 
//Your processing 
} 

ПримечаниеЭтот получите все файлы .jpg в каталоге. Цикл foreach начинается с самых старых файлов.

1

Это должно получить все файлы в каталоге:

private List<FileInfo> GetFileInfo() 
    { 
     string path = @"C:\MyPath"; 
     List<FileInfo> files = new List<FileInfo>(); 
     DirectoryInfo di = new DirectoryInfo(path); 

     //TopDirectoryOnly if you don't want subfolders 
     foreach (FileInfo f in di.GetFiles("*.jpg", SearchOption.TopDirectoryOnly)) 
     { 
      files.Add(f); 
     } 

     return files; 
    } 

Затем в вашем коде перебирайте возвращенную коллекцию и выполняйте любую работу, которую необходимо выполнить с помощью им.