我使用C#将.doc转换为.pdf。 .doc位于供应商的网站上。要获取.doc,我们必须单击一个按钮,向我们提供Open, Save, or Cancel
的选项。当用户点击Save
按钮时,会提示输入该位置。用户选择映射驱动器中的位置,例如S:\Some Folder\abc.doc
,实际文件夹位置为\\server\\folder\Some Folder
。这是我的程序进入的地方。我在c#中使用FileSystemWatcher
类,并为.doc文件设置了过滤器。我可以在调试中看到找到该文件。文件夹位置是硬编码的,并保存为上面提到的实际文件夹位置。用户和应用程序具有该文件夹的完全权限。但是,当我运行程序时,我得到FileNotFoundException
。
这就是我所拥有的
WriteToFile("Starting Word application");
Application word = new Application();
object missing = Type.Missing;
var sourcefile = new FileInfo(path);
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: sourcefile.FullName, ReadOnly: true);
奇怪的是sourcefile.FullName
没有显示path
设置的硬编码服务器地址。它将文件路径显示为S:\Some Folder\abc.doc
,这对我来说毫无意义。这里发生了什么,以及为什么找不到该文件?
答案 0 :(得分:1)
当基础文件仍在使用/被写入时,OnCreate
事件可能会触发,如果您立即尝试访问它,可能会导致问题。
简单的解决方案是引入任意延迟以允许文件被创建它的进程关闭,或者更好的是具有尝试访问文件的短延迟的循环,捕获相关的异常,如果它发生并且重试。
答案 1 :(得分:0)
我的猜测是你使用了错误的FileInfo对象。尝试生成一个新的或使用
System.IO.Path.Combine(@"\\server\folder\Some Folder", "sourcefile.Name")
您还可以使用它来生成新的FileInfo对象。您正在使用的对象可能是使用映射驱动器的用户对话框之一。您的位置也有拼写错误。 \\SERVERNAME\\
不是UNC路径。字符串的开头应该只有两个反斜杠。它应该是
@"\\server\folder\Some Folder"
WriteToFile("Starting Word application");
Application word = new Word.Application();
object missing = Type.Missing;
var sourcefile = new System.IO.FileInfo(path);
string SomeShare = @"\\SomeServer\Someshare\Somepath";
System.IO.FileInfo WorkFile = new System.IO.FileInfo(System.IO.Path.Combine(SomeShare, sourcefile.Name));
// check if the created file ends with .doc.
System.Diagnostics.Debug.WriteLine(path);
if (!path.ToLower().EndsWith(".doc"))
{
return "";
}
word.Visible = false;
WriteToFile("Opening doc as read only");
// open readonly
System.Diagnostics.Debug.WriteLine(sourcefile.FullName);
var doc = word.Documents.Open(FileName: WorkFile.FullName, ReadOnly: true);
}
这对我来说很好,它更新了正确的UNC模式的路径。如果文件仍然无法访问,您应该检查是否可以使用生成的UNC路径在工作站上打开它。