C# 启动Word进程,但文件名已更改
在C#中,我在临时文件夹中创建了一个名为“MyDoc.docx”的文件 然后我用这个文件开始Word进程 我使用FileSystemWatcher监视文件更改,并监视Word进程何时退出 我想看一下对文件所做的修改 但是,Word使用的文件名与我提供的不同。它使用了一个短(8.3)文件名。然而,它并没有使用我计算的短文件名应该是什么——似乎Word使用的是它自己的临时文件名 如何确定我的文件已更改?我如何知道Word正在使用的文件名 有什么想法吗 回答:C# 启动Word进程,但文件名已更改,c#,ms-word,C#,Ms Word,在C#中,我在临时文件夹中创建了一个名为“MyDoc.docx”的文件 然后我用这个文件开始Word进程 我使用FileSystemWatcher监视文件更改,并监视Word进程何时退出 我想看一下对文件所做的修改 但是,Word使用的文件名与我提供的不同。它使用了一个短(8.3)文件名。然而,它并没有使用我计算的短文件名应该是什么——似乎Word使用的是它自己的临时文件名 如何确定我的文件已更改?我如何知道Word正在使用的文件名 有什么想法吗 回答: 应该处理重命名的事件,而不是处理Word
应该处理重命名的事件,而不是处理Word文件的更改事件。Word保存文档时,会保存临时文件,然后将其复制到原始文件名。Word总是将其临时文件放在“C:\Users\Alex\Desktop”(windows server 2008除外)中,这样您就可以找到它们了
var files = new DirectoryInfo(@"C:\Users\Alex\Desktop").GetFiles()
.Where(arg => !(arg.Attributes.HasFlag(FileAttributes.Hidden) && arg.Extension == ".docx" && arg.Name.StartsWith("~$")))
.ToList();
编辑
试着找到这个
Process[] processes = Process.GetProcesses();
int i = 0;
foreach (Process p in processes)
{
if (p.ProcessName.Contains("WinWord"))
{
try
{
ProcessModuleCollection modules = p.Modules;
for (int j = 0; j <= modules.Count - 1; j++)
{
string sFile = modules[j].FileName;//can be needed file
}
}
catch (Exception exception)
{
//MsgBox(("Error : " & exception.Message))
}
}
}
Process[]processs=Process.getprocesss();
int i=0;
foreach(进程中的进程p)
{
if(p.ProcessName.Contains(“WinWord”))
{
尝试
{
ProcessModuleCollection模块=p.模块;
对于(int j=0;jWord,总是将其临时文件放在“C:\Users\Alex\Desktop”(windows server 2008除外)中,这样您就可以像这样找到它们
var files = new DirectoryInfo(@"C:\Users\Alex\Desktop").GetFiles()
.Where(arg => !(arg.Attributes.HasFlag(FileAttributes.Hidden) && arg.Extension == ".docx" && arg.Name.StartsWith("~$")))
.ToList();
编辑
试着找到这个
Process[] processes = Process.GetProcesses();
int i = 0;
foreach (Process p in processes)
{
if (p.ProcessName.Contains("WinWord"))
{
try
{
ProcessModuleCollection modules = p.Modules;
for (int j = 0; j <= modules.Count - 1; j++)
{
string sFile = modules[j].FileName;//can be needed file
}
}
catch (Exception exception)
{
//MsgBox(("Error : " & exception.Message))
}
}
}
Process[]processs=Process.getprocesss();
int i=0;
foreach(进程中的进程p)
{
if(p.ProcessName.Contains(“WinWord”))
{
尝试
{
ProcessModuleCollection模块=p.模块;
对于(int j=0;j应处理重命名事件,而不是处理Word文件的更改事件。Word保存其文档时,它会保存其临时文件,然后将其复制到原始文件名。应处理重命名事件,而不是处理Word文件的更改事件。Word保存其文档时,它会保存其临时文件,并然后将其复制到原始文件名