Es könnte, da dies so einfach sein, wenn ich Sie richtig verstehen:
var fileInfo = new FileInfo(file);
if (!fileInfo.Name.StartsWith("~$"))
{
var wordApplication = new Microsoft.Office.Interop.Word.Application();
var document = wordApplication.Documents.Open(file);
}
Zusätzlich (wie Panagiotis Kanavos wies darauf hin), Sie tun sich selbst keinen Gefallen, indem Sie Directory.EnumerateFiles()
mit die foreach
. Der Grund dafür ist, dass die Methode MoveNext
des Enumerators bei jeder Schleife FindNextFile()
aufruft, sodass neue Dateien in den Ergebnissen angezeigt werden können. Da eine neue ~$...docx
Datei jedes Mal, diese Aussage läuft erstellt wird (siehe this für eine Erklärung, warum dies geschieht):
var document = wordApplication.Documents.Open(file);
Sie über diese Dateien zu kommen, gehen wie der Looping weiter. Dies kann vermieden werden, indem Directory.GetFiles()
anstelle von Directory.EnumerateFiles()
verwendet wird, da ersteres nur ein Array von Dateipfaden zurückgibt, das sich nicht ändert, wenn Sie es durchlaufen; d. h. es ist nur eine statische Liste von Dateien, die unter beginnend mit der Schleife erstellt wird, die Dateien ignoriert, die erstellt werden während das Looping geschieht.
Sie sind temporäre Dateien und haben das Präfix '~ $'. [Es gibt ein Microsoft Support-Dokument] (https://support.microsoft.com/en-ie-/kb/211632), das sie in Bezug auf Word erklärt. – Petesh
@Petesh Wie kann ich das ignorieren? – TamoDaleko
Ich muss mich selbst für die ~ $ Dateien korrigieren; Sie sind tatsächlich "Besitzer" -Dateien, um anzuzeigen, wer die Datei geöffnet hat. Rory.ap's korrigierte Antwort sollte es jedoch abdecken. – Petesh