Я пытаюсь автоматизировать процесс слияния с использованием C#, DataSet и OpenXML. У меня есть полный рабочий пример при запуске локально. Однако при публикации на нашем веб-сервере я получаю сообщение об ошибке «Отказано в доступе», несмотря на то, что он даже допускает полный доступ во всем мире.Доступ запрещен при попытке открыть скопированное слово doc с OpenXML
Вот код, что приводит к сообщению об ошибке:
try
{
var strTemplateTestFile = strMergeBuildingLocation.Replace(".docx", "_Test.docx");
// Don't continue if the template file name is not found
if (!File.Exists(strTemplateFileName))
throw new Exception("TemplateFileName (" + strTemplateFileName + ") does not exist");
foreach (var dr in dsData.Tables[0].Rows)
{
string strFileName;
if (doesDestinationExist(strMergeBuildingLocation))
{
File.Copy(strTemplateFileName, strTemplateTestFile, true);
strFileName = strTemplateTestFile;
}
else
{
File.Copy(strTemplateFileName, strMergeBuildingLocation, true);
strFileName = strMergeBuildingLocation;
}
var pkg = Package.Open(strFileName, FileMode.Open, FileAccess.ReadWrite);
using (var docGenerated = WordprocessingDocument.Open(pkg))
Проблема падает в последней строке при попытке открыть docGenerated.
Сообщение об ошибке я получаю это:
Доступ к пути «DOCX путь» запрещен.
Файл копирует, как ожидалось, и может быть открыт и изменен вручную. В папках нет ничего, что ограничивало бы доступ к файлу. Есть ли у кого-нибудь мысли о том, что может быть проблемой?
Отмечено ли оно как только для чтения? – tnw
Я предлагаю вам использовать [Sysinternals Process Monitor] (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx), чтобы определить точную точку, которая вызывает ошибку отказа в доступе. Это всегда помогает мне. – Luizgrs
@tnw, он не помечен как только для чтения, нет. – stharp888