сортировка файлов на фат32 флешке

я делаю приложение для сортировки файлов в каталоге в том же порядке, что и список, и теперь я пытаюсь заставить его сортировать файл в файловой таблице fat32, но не могу узнать, как или если я могу сделать это на С#, может кто-нибудь помочь мне вот код, который добавляет файлы в список

private void openfolder()
{
     if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
     {
          DirectoryInfo dinfo = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
          FileInfo[] Files = dinfo.GetFiles("*.*");
          foreach (FileInfo file in Files)
          {
              listBox1.Items.Add(file.Name);
          }
      }
}

person outlaw1994    schedule 01.04.2014    source источник
comment
На самом деле нет такой вещи, как сортировка файлов в каталоге. Это только программа отображает такие сорта. По крайней мере, не на любом полезном уровне — и не на том уровне кода, над которым вы работаете.   -  person Andrew Barber    schedule 01.04.2014
comment
это для сортировки файлов для проигрывателей компакт-дисков и прочего, есть программы, которые делают это как fatsort, но я хочу больше контролировать его, поэтому я знаю, что эта программа может сделать это на С++, но я еще не изучил С++, поэтому мне было интересно, могу ли я сделать это в С#   -  person outlaw1994    schedule 01.04.2014
comment
Ааа... стоило упомянуть об этом! Тот редкий случай, когда это имеет смысл!   -  person Andrew Barber    schedule 01.04.2014
comment
lol np, как я уже сказал, я хочу отсортировать файл в любом порядке, который я хочу, а не только в алфавитном порядке, я собираюсь посмотреть исходный код fatsorter, чтобы увидеть, может ли он помочь   -  person outlaw1994    schedule 01.04.2014
comment
возможный дубликат сортировки файлов в FAT32 без их повторного копирования   -  person spender    schedule 01.04.2014
comment
@spender это в java, а также у них не было никакого кода, так что это не помогает, а не дубликат   -  person outlaw1994    schedule 01.04.2014
comment
Принятый ответ говорит вам, что именно делать...   -  person spender    schedule 01.04.2014
comment
но это не то, что мне нужно, мне нужно отсортировать сотни файлов за один раз, я пытался избежать кода, который перемещает их в новую папку, а затем возвращает обратно в правильном порядке.   -  person outlaw1994    schedule 01.04.2014
comment
Я не покупаю это. Перемещение файла не является операцией копирования/удаления. Он просто перетасовывает таблицу распределения. Это будет быстро.   -  person spender    schedule 01.04.2014
comment
ни у одного из них нет ручной сортировки файлов, как я хочу, чтобы иметь возможность ставить избранное первым, а не в алфавитном порядке, как все остальные. в любом случае не имеет значения, я решил пойти с перемещением файла во временную папку, а затем вернуться в правильном порядке   -  person outlaw1994    schedule 01.04.2014
comment
@outlaw1994 этот образец должен подойти для ваших модификаций, по умолчанию он сортируется по алфавиту поэтому вам придется изменить этот порядок, в качестве альтернативы предоставить порядок из вашего графического интерфейса.   -  person PTwr    schedule 01.04.2014
comment
@PTwr я нашел это раньше, но это на С++, а не на С#, так что это не очень помогает   -  person outlaw1994    schedule 01.04.2014
comment
@ outlaw1994 outlaw1994, насколько я вижу, вы можете предоставить модифицированный файл данных этому консольному приложению, поэтому изменения его кода не потребуются, поскольку вы можете управлять консольными приложениями из кода .NET - (пример)   -  person PTwr    schedule 01.04.2014


Ответы (1)


Ok. Итак, это происходит примерно так:

var path = @"U:\";
var di = new DirectoryInfo(path);
var files = di.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly).ToList();
var newDirPath = Path.Combine(path,Guid.NewGuid().ToString("N"));
di = Directory.CreateDirectory(newDirPath);
files.ForEach(f => f.MoveTo(Path.Combine(newDirPath, f.Name)));
files=di.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)
        .OrderBy(f=>f.CreationTime) //sort here
        .ToList();
files.ForEach(f=>f.MoveTo(Path.Combine(path,f.Name)));
Directory.Delete(newDirPath);

Ваше возражение против перемещения файлов необоснованно. Операция перемещения не копирует данные. Он просто изменяет таблицу распределения.

person spender    schedule 01.04.2014
comment
Я хочу изменить данные распределения, потому что так мой проигрыватель компакт-дисков и многие другие сортируют. они используют данные о распределении - person outlaw1994; 01.04.2014
comment
@outlaw1994: Я немного почитал, и вот как вы это делаете. Вы пробовали этот подход? Что заставляет вас думать, что вы должны делать какие-то низкоуровневые манипуляции? - person spender; 01.04.2014
comment
потому что так делали все остальные проги на С++. я попробую так, но, глядя на код, он сортирует их по времени создания, как бы я отсортировал его в том же порядке, что и список - person outlaw1994; 01.04.2014