Как проверить, защищен ли файл Excel от записи или нет в C #? - PullRequest
1 голос
/ 13 мая 2010

Я разрабатываю пример приложения, в котором мне нужно открыть файл Excel и проверить, защищен ли файл от записи или нет. Код

using System.Windows.Forms;
using Microsoft.Office.Core;

private void button1_Click(object sender, EventArgs e)
{
    string fileNameAndPath = @"D:\Sample\Sample1.xls"; 
    // the above excel file is a write protected.

    Microsoft.Office.Interop.Excel.Application a = 
              new  Microsoft.Office.Interop.Excel.Application();
    if (System.IO.File.Exists(fileNameAndPath))
    {
        Microsoft.Office.Interop.Excel.ApplicationClass app = 
              new Microsoft.Office.Interop.Excel.ApplicationClass();

        // create the workbook object by opening  the excel file.
        app.Workbooks.Open(fileNameAndPath,0,false,5,"","",true,
                           Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                           "\t",false, true, 0,false,true,0);

        Microsoft.Office.Interop.Excel._Workbook w = 
              app.Workbooks.Application.ActiveWorkbook;

        if (w.ReadOnly)
              MessageBox.Show("HI");
        // the above condition is true.
    }

}

Я хотел бы знать, защищен ли файл от записи или нет.

Ответы [ 6 ]

3 голосов
/ 13 мая 2010

Вы можете получить FileAttributes как это:

if ((File.GetAttributes(fileNameAndPath) & FileAttributes.ReadOnly) > 0)
{
    // The file is read-only (i.e. write-protected)
}

См. Документацию: http://msdn.microsoft.com/en-us/library/system.io.fileattributes.aspx

2 голосов
/ 13 мая 2010

Если вы хотите проверить, доступен ли файл только для чтения, вы можете проверить, используя File.GetAttributes(), например:

if(File.GetAttributes(fileNameAndPath) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
  //it's readonly :)
}
1 голос
/ 13 мая 2010

Я думаю, вы хотите взглянуть на свойство HasPassword класса WorkBook.

Больше информации по адресу: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.haspassword%28VS.80%29.aspx

Редактировать: оставил мой старый ответ ниже

Вы имеете в виду, если файл или рабочая книга только для чтения?

Чтобы проверить, доступна ли книга только для чтения, класс WorkBook имеет свойство ReadOnly.

В противном случае, чтобы проверить файл, посмотрите на использование класса IO.FileInfo в платформе для получения атрибутов файла, как в следующем коде:

FileInfo fsi = new FileInfo("filepathandname");
if ((fsi.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly )
{
    // it's readonly
}
0 голосов
/ 19 февраля 2014

Вы можете проверить защиту с помощью

activeDocument.ProtectionType
0 голосов
/ 13 мая 2010

По сути, ReadOnly и защита от записи - это одно и то же. Однако вы можете столкнуться с ситуацией, когда вы не можете получить доступ к файлу, потому что он используется другим процессом. В этом случае вы пытаетесь открыть его с помощью FileShare, как показано ниже:

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, 
    FileShare.ReadWrite))
{
    ...
}
0 голосов
/ 13 мая 2010

Вы можете проверить File.GetAttributes

...