Удалите файлы Doc и сохраните файлы Docx [дубликат]

Я пытаюсь удалить файлы .doc в папке, которая также содержит файлы .docx тоже.

Это моя попытка:

  string [] files = Directory.GetFiles (Path, "* .doc", SearchOption  .AllDirectories); foreach (строка f в файлах) {File.Delete (f);}  

Удаляет текстовые документы с расширениями .doc и .docx . Я хочу удалить только файлы .doc и оставить файлы .docx .


Документация MSDN для метода Directory.GetFiles (String, String, SearchOption) включает следующее примечание:

При использовании подстановочного знака звездочки в searchPattern , таком как «* .txt», количество символов в указанном расширении влияет на поиск следующим образом:

• Если указанное расширение — длиной ровно три символа, метод возвращает файлы с расширениями, которые начинаются с указанного расширения. Например, «* .xls» возвращает и «book.xls», и «book.xlsx».

• Во всех остальных случаях метод возвращает файлы, которые точно соответствуют указанному расширению. Например, «* .ai» возвращает «file.ai», но не «file.aif».

При использовании подстановочного знака вопросительного знака этот метод возвращает только файлы, соответствующие указанному файлу. расширение. Например, для двух файлов, «file1.txt» и «file1.txtother» в каталоге, шаблон поиска «файл? .Txt» возвращает только первый файл, тогда как шаблон поиска «файл * .txt» возвращает оба файла.

Самый простой способ обойти эту «помощь» Microsoft — отфильтровать результаты Directory.GetFiles вызов:

  string [] files = Directory.GetFiles (filesPath, "* .doc", SearchOption.AllDirectories); foreach (строка f в files.Where (f =>  Path.GetExtension (f) == ".doc")) {File.Delete (f);}  

Я переименовал вашу переменную Path потому что он конфликтует с классом System.IO.Path , который содержит статический метод GetExtension . Как правило, давать переменным то же имя, что и существующие классы, является плохой привычкой.


Фильтр результаты для точного расширения, которое вам нужно.

  string [] files = Directory.GetFiles (Path, «* .doc», SearchOption.AllDirectories); foreach (string f  в файлах.Where (f => String.Compare (". doc", f.Extension, StringComparison.OrdinalIgnoreCase) == 0)) {File.Delete (f);}  


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

  DirectoryInfo Dir =  new DirectoryInfo (путь); foreach (файл FileInfo в Dir.GetFiles ()) {//Code}  

, поскольку вы можете получить доступ к расширению файла с помощью

  файл. Расширение  

вот так. Я думаю, что безопаснее использовать

2


Эта проблема возникает из-за того, что Windows игнорирует любая часть расширения файла, длина которой превышает 3 символа.

Изменение вашего кода на это решит эту проблему:

  var files = Directory.  GetFiles (Path, «* .doc», SearchOption.AllDirectories) .Where (w => w.ToLowerInvariant (). EndsWith («. Doc»));  

5


Вы можете получить первое расширение, поставить галочку на файл .doc. затем вызовите функцию удаления.

  string extension = System.IO.Path.GetExtension (@ "c:  yourfile.docx"); if (extension! = ".docx"  ) {//УДАЛИТЬ ФАЙЛ ЗДЕСЬ}  

2


   строка [] files = Directory.GetFiles (Путь, «* .doc», SearchOption.AllDirectories);  foreach (строка f в файлах.Where (f =>! f.EndsWith (". docx"))) {File.Delete (f);  }  

Microsoft предоставляет примеры этой проблемы в своем обзоре метода DirectoryInfo.GetFiles Method (String, SearchOption) (https://msdn.microsoft.com/en-us/ библиотека/ms143327 (v = vs.110) .aspx). В них указано:

В следующем списке показано поведение различной длины для параметра searchPattern:

  • » * .abc «возвращает файлы с расширением .abc, .abcd, .abcde, .abcdef и т. д.
  • «*. abcd» возвращает только файлы с расширением .abcd.
  • «*. abcde» возвращает только файлы с расширением .abcde.
  • «*. abcdef» возвращает только файлы с расширением .abcdef.

Вам необходимо отфильтровать набор результатов Directory.GetFiles, чтобы вы работаете только с теми файлами, которые вам нужны.



Загрузка и открытие docx Firefox добавляет документ в файл

Я использую портал Hotdocs , который является внутренним инструментом сборки документов. Рекомендуемым браузером является Firefox, но в последнее время он неправильно обрабатывает файлы docx 2016 года. Когда мы выбираем файл на сайте портала (внутренний сайт), мы проходим собеседование и получаем ссылку «скачать» собранный файл. Когда вы щелкаете по этой ссылке, появляется всплывающее окно с именем файла abc.docx, но затем указывается, что это документ Word 97-2003, хотя это не так. Оригинального шаблона нет. Если я решу открыть файл, он откроется и отобразится как abc.docx.doc. Если я сохраню файл, вместо того, чтобы открывать его, он сохраняется как abc.docx.

Если мы запустим этот же процесс в IE/Edge, файл открывается как abc.docx, как и должно. Я удалил Firefox и переустановил. Есть ли что-нибудь, что могло вызвать это? Я попробовал несколько шагов по устранению неполадок, и, похоже, ничего не меняет этот результат.

Спасибо.

Оцените статью
clickpad.ru
Добавить комментарий