Jedna z metod jest taka żeby GetFiles wykonać na każdym rozszerzeniu i dołączać kolejne wyniki czyli:
ArrayList files = new ArrayList();
foreach (string ext in m_ScanExtensionsList)
{
string[] temp = Directory.GetFiles(path, ext);
if (temp.Length > 0)
{
files.AddRange(temp);
}
}
Niby do zaakceptowania ale:
- trzeba pamiętać żeby ext bylo w formacie "*.doc"
- GetFiles zachowuje się dobrze do momentu jeśli poszukwane rozszerzenie ma mniej lub więcej niż 3 znaki. Jeśli będziemy szukać "*.doc" to GetFiles zwroci takze docx, doct, etc. Jeśli będziemy szukać "*.docx" to GetFiles zwróci tylko docx. Czyli w przypadku 3 literowych rozszerzen GetFiles traktuje to tak jakby występowala na koncu * (znak zastepujacy dowolna ilosc znakow). Jest to podobno związane z historycznym 8.3 z DOSa.
C:\Documents and Settings\mak>dir c:\*.xls
Volume in drive C has no label.
Volume Serial Number is 6856-6816
Directory of c:\
06/06/2008 05:52 PM 82,491 20080606 Feature3.xlsx
06/05/2008 10:29 AM 34,915 20080605 Work breakdown v0.05.xlsx
05/29/2008 11:56 AM 16,523 MAK_Plan.xlsx
06/05/2008 03:57 PM 98,816 WeekPlan v0 3.xls
4 File(s) 232,745 bytes
0 Dir(s) 1,040,863,232 bytes free
C:\Documents and Settings\mak>
Druga metoda zeby wyciagnąc wiecej niż jedno rozszerzenie:
DirectoryInfo directory = new DirectoryInfo(path);
ArrayList files = new ArrayList();
foreach (FileInfo file in directory.GetFiles())
{
string ext = file.Extension.ToUpper();
if (m_ScanExtensionsList.Contains(ext))
files.Add(file.FullName);
}
Pytamy więc o wszystkie pliki a później filtrujemy wyniki.
Brak komentarzy:
Prześlij komentarz