При открытии и сохранении документов Word / Excel с использованием следующего кода открываемые и сохраняемые файлы добавляются в последние файлы проводника Windows (см. Скриншот).Сам код прекрасно работает для моих целей;Я только скопировал небольшую часть с соответствующим кодом окружения.Тем не менее, я испытываю трудности с остановкой этого нежелательного поведения, и поиск в Интернете, кажется, только дает мне результаты о том, как предотвратить отображение файлов в списке «Недавние файлы» самих офисных приложений, а не Windows File Explorer.
Я выполняю этот код в каталогах, которые содержат верхние тысячи, некоторые даже разбиты на 5-значные числа файлов Office в старом формате, отличном от xml.Когда вызывается .Open()
, исходный файл появляется в списке, а когда вызывается .SaveAs()
/ .SaveAs2()
, новый файл появляется в списке.Это происходит в режиме реального времени, когда я выполняю шаги по коду, и это вызывает скачок использования процессора в процессе explorer.exe.Открытие и повторное сохранение офисных файлов старого формата происходит довольно быстро, и я подозреваю, что это приводит к большой загрузке ЦП из-за постоянной обработки explorer.exe последних файлов.Другие симптомы, которые, я думаю, связаны с тем, что курсор постоянно имеет вращающееся колесо под ним, когда код выполняется, и весь графический интерфейс ОС кажется несколько не отвечающим.
Чтобы быть ясным, я считаю, что упреждающийЛучше всего выбрать решение, не позволяющее Windows добавлять файлы в список, а не использовать ретроактивное решение, которое выполняет очистку списка только после факта.
using WORD = Microsoft.Office.Interop.Word;
using EXCEL = Microsoft.Office.Interop.Excel;
//==============================================================================
try
{
if (newFileExt == FileExt.NEW_Word)
{
//open the doc
var document = WordApp.Documents.Open(FileName: fdesc.FileInfo.FullName, ConfirmConversions: false, ReadOnly: true, AddToRecentFiles: false, Visible: false);
//save the doc
document.SaveAs2(FileName: newname, FileFormat: WORD.WdSaveFormat.wdFormatXMLDocument, CompatibilityMode: WORD.WdCompatibilityMode.wdCurrent, AddToRecentFiles: false);
// close the doc
document.Close(WORD.WdSaveOptions.wdDoNotSaveChanges);
}
else if (newFileExt == FileExt.NEW_Excel)
{
// open the workbook
/// https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.workbooks.open?view=excel-pia#Microsoft_Office_Interop_Excel_Workbooks_Open_System_String_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_System_Object_
EXCEL.Workbook workbook = ExcelApp.Workbooks.Open(Filename: fdesc.FileInfo.FullName, ReadOnly: true, IgnoreReadOnlyRecommended: true, AddToMru: false);
// save the doc
/// https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel._workbook.saveas?view=excel-pia
if (workbook.HasVBProject)
{
FileInfo newFile = new FileInfo(newname);
newname = newFile.DirectoryName + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(newFile.Name) + FileExt.NEW_Excel_Macro;
UpateNewFileNameConsole(new FileInfo(newname));
workbook.SaveAs(Filename: newname, FileFormat: EXCEL.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, ReadOnlyRecommended: false, AddToMru: false);
}
else
{
workbook.SaveAs(Filename: newname, FileFormat: EXCEL.XlFileFormat.xlOpenXMLWorkbook, ReadOnlyRecommended: false, AddToMru: false);
}
// close the Workbook
workbook.Close(SaveChanges: false);
}
else { throw new Exception("unkown File in conversion"); }
//move the old file
File.Move(fdesc.FileInfo.FullName, moveDir.FullName + Path.DirectorySeparatorChar + fdesc.FileInfo.Name);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
//==============================================================================
public static class FileExt
{
public const string OLD_Word = ".doc";
public const string NEW_Word = ".docx";
public const string OLD_Excel = ".xls";
public const string NEW_Excel = ".xlsx";
public const string NEW_Excel_Macro = ".xlsm";
public const string RichTextFormat = ".rtf";
public const string OldFormatDir = "!old_format";
}
}
Снимок экрана Windows File Explorer после запускакод для бита: