C# 启动Word进程,但文件名已更改

C# 启动Word进程,但文件名已更改,c#,ms-word,C#,Ms Word,在C#中,我在临时文件夹中创建了一个名为“MyDoc.docx”的文件 然后我用这个文件开始Word进程 我使用FileSystemWatcher监视文件更改,并监视Word进程何时退出 我想看一下对文件所做的修改 但是,Word使用的文件名与我提供的不同。它使用了一个短(8.3)文件名。然而,它并没有使用我计算的短文件名应该是什么——似乎Word使用的是它自己的临时文件名 如何确定我的文件已更改?我如何知道Word正在使用的文件名 有什么想法吗 回答: 应该处理重命名的事件,而不是处理Word

在C#中,我在临时文件夹中创建了一个名为“MyDoc.docx”的文件

然后我用这个文件开始Word进程

我使用FileSystemWatcher监视文件更改,并监视Word进程何时退出

我想看一下对文件所做的修改

但是,Word使用的文件名与我提供的不同。它使用了一个短(8.3)文件名。然而,它并没有使用我计算的短文件名应该是什么——似乎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保存其文档时,它会保存其临时文件,并然后将其复制到原始文件名