Я пытаюсь удалить файлы .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 и переустановил. Есть ли что-нибудь, что могло вызвать это? Я попробовал несколько шагов по устранению неполадок, и, похоже, ничего не меняет этот результат.
Спасибо.