Сделать копию существующего списка и перебрать новую копию.
for (String str : new ArrayList<String>(listOfStr))
{
listOfStr.remove(/* object reference or index */);
}
Если бы Вы интересуетесь свойствами файлов, таких как CreationTime, то имело бы больше смысла использовать Систему. IO.DirectoryInfo. GetFileSystemInfos (). Можно тогда отсортировать их с помощью одного из дополнительных методов в Системе. Linq, например:
DirectoryInfo di = new DirectoryInfo("C:\\");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.CreationTime);
Редактирование - извините, я не заметил тег.NET2.0, так проигнорируйте сортировку LINQ. Предложение для использования Системы. IO.DirectoryInfo. GetFileSystemInfos () все еще содержит все же.
В.NET 2.0, необходимо будет использовать Массив. Вид к виду FileSystemInfos.
Кроме того, можно использовать делегата Компаратора, чтобы избежать необходимости объявлять класс только для сравнения:
DirectoryInfo dir = new DirectoryInfo(path);
FileSystemInfo[] files = dir.GetFileSystemInfos();
// sort them by creation time
Array.Sort<FileSystemInfo>(files, delegate(FileSystemInfo a, FileSystemInfo b)
{
return a.LastWriteTime.CompareTo(b.LastWriteTime);
});
Вот решение VB.Net, которое я использовал.
Первый делают класс для сравнения дат:
Private Class DateComparer
Implements System.Collections.IComparer
Public Function Compare(ByVal info1 As Object, ByVal info2 As Object) As Integer Implements System.Collections.IComparer.Compare
Dim FileInfo1 As System.IO.FileInfo = DirectCast(info1, System.IO.FileInfo)
Dim FileInfo2 As System.IO.FileInfo = DirectCast(info2, System.IO.FileInfo)
Dim Date1 As DateTime = FileInfo1.CreationTime
Dim Date2 As DateTime = FileInfo2.CreationTime
If Date1 > Date2 Then Return 1
If Date1 < Date2 Then Return -1
Return 0
End Function
End Class
Тогда используют компаратор при сортировке массива:
Dim DirectoryInfo As New System.IO.DirectoryInfo("C:\")
Dim Files() As System.IO.FileInfo = DirectoryInfo.GetFiles()
Dim comparer As IComparer = New DateComparer()
Array.Sort(Files, comparer)
Dim Files() As String
Files = System.IO.Directory.GetFiles("C:\")
Array.Sort(Files)
От msdn:
порядок возвращенных имен файлов не гарантируется; используйте Вид () метод, если определенный порядок сортировки требуется.
Вид () методом является стандартный Массив. Вид (), который берет в IComparables (среди других перегрузок), поэтому если Вы сортируете по дате создания, она обработает локализацию на основе настроек машины.
Вы корректны, значение по умолчанию является моим именем asc. Единственным путем я нашел для изменения порядка сортировки это для создания таблицы данных из набора FileInfo.
Вы можете, тогда использовал DefaultView из таблицы данных, и отсортируйте каталог с.Sort методом.
Это, вполне включают и довольно медленный, но я надеюсь, что кто-то отправит лучшее решение.
Можно реализовать пользовательский iComparer, чтобы сделать сортировку. Считайте информацию о файле для файлов и сравните, как Вам нравится.
IComparer comparer = new YourCustomComparer();
Array.Sort(System.IO.Directory.GetFiles(), comparer);
Документация MSDN состояния, что нет никакой гарантии никакого порядка на возвращаемые значения. Необходимо использовать Вид () метод.
Вы могли записать пользовательский интерфейс IComparer в вид датой создания, и затем передать его для Выстраивания. Вид. Вы, вероятно, также хотите посмотреть на StrCmpLogical, который является тем, что используется, чтобы сделать использование Проводника сортировки (сортирующий числа правильно с текстом).
Если Вы хотите отсортировать по чему-то как дата создания, вероятно, необходимо использовать DirectoryInfo. GetFiles и затем сортируют полученный массив с помощью подходящего Предиката.
Просто идея. Мне нравится находить простой выход и пытаться повторно использовать уже имеющиеся ресурсы. Если бы я должен был сортировать файлы, я бы просто создал процесс и сделал syscal в «DIR [x:\Folders\SubFolders*.*] /s /b /on» и захватил выходные данные.
С помощью системной команды DIR вы можете сортировать по :
/O List by files in sorted order.
sortorder N By name (alphabetic) S By size (smallest first)
E By extension (alphabetic) D By date/time (oldest first)
G Group directories first - Prefix to reverse order
The /S switch includes sub folders
Я НЕ УВЕРЕН, использует ли D = By Date/Time LastModifiedDate или FileCreateDate. Но если нужный порядок сортировки уже встроен в команду DIR, я получу это, вызвав syscall. И это БЫСТРО. Я просто ленивый парень ;)
После небольшого гуглинга я обнаружил, что переключатель для сортировки по определенной дате / времени:-
/t [[:]TimeField] : Specifies which time field to display or use for sorting. The following list describes each of the values you can use for TimeField.
Value Description
c : Creation
a : Last access
w : Last written