我在正在编写的加载项中保存 PowerPoint 文件时遇到问题。
基本上,我需要将当前打开的演示文稿另存为 wmv,然后通过 FTP 将其传输到外部服务器……听起来很简单吧?
我已经研究出如何将当前打开的演示文稿保存为 wmv。
我还有代码来检查文件是否打开,这样我就可以知道“保存”过程何时完成。
但是代码只是进入了一个无限循环。wmv 开始写入但永远不会超过 0kb。
如果我删除线
checkfile(exportPath, exportName);
它工作得很好......否则它只会停留在一个循环中。
这是我到目前为止的代码......
using System;
using System.Windows.Forms;
using Office = Microsoft.Office.Core;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using System.IO;
namespace PowerPointAddIn2
{
public partial class LoginPanel : UserControl
{
public LoginPanel()
{
InitializeComponent();
}
private void LoginPanel_Load(object sender, EventArgs e)
{
}
private void btnLogin_Click(object sender, EventArgs e)
{
string exportName = "video_of_presentation";
string exportPath = @"C:\{0}.wmv";
// Export the currently open presentation
PowerPoint.Application ppApplication = null;
ppApplication = new PowerPoint.Application();
ppApplication.Activate();
ppApplication.ActivePresentation.SaveAs(String.Format(exportPath, exportName), PowerPoint.PpSaveAsFileType.ppSaveAsWMV, Office.MsoTriState.msoTrue);
checkfile(exportPath, exportName);
MessageBox.Show("Finished");
}
protected void checkfile(string exportPath, string exportName)
{
FileInfo f = new FileInfo(String.Format(exportPath, exportName));
while (IsFileLocked(f) == true) { System.Threading.Thread.Sleep(5000); }
MessageBox.Show("Finished");
}
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
}
}
根据我发布的先前线程,我还尝试了 Thread.Join() 以查看是否可以在继续之前简单地等待保存线程完成,但是在保存文件时它根本没有暂停,所以我结束了同样的结果。
任何帮助/指针将不胜感激。
谢谢