在我的场景中,我正在以戏剧性的方式打开Word文档。如果程序打开同一文档,它应该提示用户文档已经打开。
Process[] pro = Process.GetProcessesByName("WINWORD");
if (pro.Length > 0)
{
foreach (Process p in pro)
{
p.kill();
}
}
我正在使用上面的代码来查找进程并查杀已打开的文档。问题是它正在杀死word.exe,以便所有其他打开的文档也关闭。
如何找到文档的名称并仅关闭该特定文档?
我使用p.MainWindowTitle
来获取已打开文档的名称,但它没有显示所有打开的文档,而是显示第一个打开的文档名称。
什么是正确的解决方案?
答案 0 :(得分:3)
您可以使用File.Open
方法以非共享模式FileShare.None
打开文件。
FileStream stream = null;
bool isOpen = false;
try
{
stream = File.Open(@"DFilePath&Name",FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch(IOException)
{
isOpen = true;
//Show your prompt here.
}
finally
{
if (stream != null)
stream.Close();
}
if(!isOpen)
Process.Start(@"FilePath&Name");
如果文件已经打开,它将抛出一个IOException
,您可以捕获并显示您的提示。
顺便说一下,如果您只需要显示提示,为什么要首先杀死所有进程?
答案 1 :(得分:1)
更新
这是一个通用的解决方案。
使用Microsoft.Office.Interop.Word:
using Microsoft.Office.Interop.Word;
class Program
{
static void Main()
{
// Open a doc file.
Application application = new Application();
Document document = application.Documents.Open("C:\\word.doc");
// Close word. if desired
// application.Quit();
}
}
我怀疑单词会自动阻止两次打开同一个文档。如果没有,则Documetns界面枚举任何当前打开的文档,以便您可以事先检查