首页 新闻 会员 周边 捐助

Process打开文件,急!急!急!!!

0
悬赏园豆:50 [已解决问题] 解决于 2011-01-03 22:30

C#中,用Process打开文件并等待文件关闭怎么做?Process.Start不会创建本机已存在的进程。也就是说,如果本机有已经打开word文档,我再使用Process.Start返回的是NULL。如果指定了winword的地址,虽然返回了进程,但是proc.WaitForExit()也无效。程序不会等待文件关闭就继续执行了。请问如果实现?

期待是绝望的主页 期待是绝望 | 初学一级 | 园豆:112
提问于:2010-12-23 16:55
< >
分享
最佳答案
0

想到的方法不知道合不合适:

1.创建一个批处理文件,用于打开doc文件,然后没过30秒去判定一下这个文件是否关闭了,关闭了则退出,无法打开文件也退出。

2.process中执行这个批处理文件,然后WaitForExit();

3.通过判定process的ExitCode来判定是否执行成功。

代码如下:

批处理

 

@echo off
setlocal ENABLEEXTENSIONS
start
"" "%~f1" /wait
if not %errorlevel%==0 exit
:start
ping
127.0.0.1 /w 30000 >nul
rename
"%~f1" "%~nx1"
if errorlevel 1 goto start
if errorlevel 0 exit

 

 

C#测试代码

 

class Program
{
static void Main(string[] args)
{
string batchPath = "\"G:\\1 3\\1.bat\"";
string docPath = "\"G:\\1 3\\2.doc\"";
ProcessStartInfo startInfo
= new ProcessStartInfo(batchPath);
startInfo.Arguments
= docPath;
startInfo.CreateNoWindow
= false;
startInfo.WindowStyle
= ProcessWindowStyle.Hidden;
Process process
= Process.Start(startInfo);
process.WaitForExit();
if (process.ExitCode != 0)
{
Console.WriteLine(
"文件打开存在错误");
}
Console.WriteLine(process.ExitCode);
Console.ReadLine();
}
}

在闯入路径增加了引号,批处理中增加了启用命令行扩展

 

 

收获园豆:40
wgz | 小虾三级 |园豆:1254 | 2010-12-24 14:33
谢谢你的回答!刚才测试了一下,你提供的方法的确能解决我的问题。但还有一个问题,在路径中有空格的时候这个批处理文件不能打开文件。请问怎么修改?我对批处理这个命令是完全不懂,不好意思,见笑了!
期待是绝望 | 园豆:112 (初学一级) | 2010-12-24 16:53
还有,此方法会不会造成电脑比较卡?
期待是绝望 | 园豆:112 (初学一级) | 2010-12-24 17:06
应该还好,你在任务管理器中看下批处理所占的资源,批处理在回复中改了下,应该可以了
wgz | 园豆:1254 (小虾三级) | 2010-12-25 09:36
不好意思,问题依旧,还是不能打开带空格的路径
期待是绝望 | 园豆:112 (初学一级) | 2010-12-25 10:21
用引号将路径括起来可以了,但是批处理结束不了了。一直在等待
期待是绝望 | 园豆:112 (初学一级) | 2010-12-25 13:40
此方法还是有些局限性,在打开未知文件时,会调用程序一览选择界面。此过程中批处理就已经结束了!而我文件都还没有打开!
期待是绝望 | 园豆:112 (初学一级) | 2010-12-25 14:20
改了下(bat文件和C#文件),在自己机子上测了下没问题,打开未知文件?不是word文档吗?启用了命令扩展名(setlocal ENABLEEXTENSIONS),应该会自动使用word应用程序打开的。
wgz | 园豆:1254 (小虾三级) | 2010-12-26 18:27
呵呵,不好意思,我的问题只是列举了word文档,其实是有很多类型的文件的,包括未知文件!
期待是绝望 | 园豆:112 (初学一级) | 2010-12-27 17:03
那你的未知类型文件用什么打开呢?
wgz | 园豆:1254 (小虾三级) | 2010-12-27 21:51
调用系统本身的,就是平常咱们打开未知文件,会出现打开文件的程序选择界面。现在你写的批处理也能调用这个,但是具体用户选择哪些程序来打开文件我就不能控制了!
期待是绝望 | 园豆:112 (初学一级) | 2010-12-28 12:42
那没辙了,呵
wgz | 园豆:1254 (小虾三级) | 2010-12-28 18:41
谢谢!
期待是绝望 | 园豆:112 (初学一级) | 2010-12-28 20:03
其他回答(1)
0

确实存在你所说的问题,WINWORD 进程在打开多个文件只会创建一次,而且要等到所有文件关闭后才退出。

请问 WaitForExit 后执行什么操作,或许有 Process 外的其它方式可以解决你的问题。

收获园豆:10
鹤冲天 | 园豆:2379 (老鸟四级) | 2010-12-23 19:37
首先感谢你的回答! 做的项目中有一个编集服务器上文件的功能,而服务器上的文件类型很多,不只限于word文档。在编集完成之后我需要将新文件重新上传回给服务器。所以,我需要等待程序关闭,这样才能上传,并且,编集的时候我是把文件先下载到本地,在编集回传后再删除本地文件。
支持(0) 反对(0) 期待是绝望 | 园豆:112 (初学一级) | 2010-12-24 16:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册