Как мое приложение C# может протестировать, “считал” ли пользователь доступ к сетевому ресурсу?

Быстрое решение было бы расширить нижний колонтитул страницы:

...
printer.Footer = GetSignatureFooter("Company name LTD", "Thank you for your purchase");
printer.FooterSpacing = 15;
printer.PrintDataGridView(dgvmonths);

И метод получения нижнего колонтитула с подписью:

private string GetSignatureFooter(string companyName, string additonalMessage)
{
    StringBuilder sb = new StringBuilder();

    sb.AppendLine("Signature: ".PadRight(60, '_'));
    sb.AppendLine();
    sb.AppendLine(additonalMessage);
    sb.AppendLine();
    sb.AppendLine(companyName);

    return sb.ToString();
}
5
задан flipdoubt 15 April 2009 в 18:44
поделиться

2 ответа

Самый простой способ - просто сделать это (например, попытаться прочитать файл, например). Как упоминал Джаред, нет способа убедиться, что вы сможете читать в будущем (сбой сети, изменение разрешений и т. Д.).

Что касается кода, вы можете использовать DirectoryInfo class для некоторых попыток ответа:

        string remotePath = @"\\server\share$";
        bool haveAccess = false;

        DirectoryInfo di = new DirectoryInfo(remotePath);
        if (di.Exists)
        {
            try
            {
                // you could also call GetDirectories or GetFiles
                // to test them individually
                // this will throw an exception if you don't have 
                // rights to the directory, though
                var acl = di.GetAccessControl();
                haveAccess = true;
            }
            catch (UnauthorizedAccessException uae)
            {
                if (uae.Message.Contains("read-only"))
                {
                    // seems like it is just read-only
                    haveAccess = true;
                }
                // no access, sorry
                // do something else...
            }
        }

В приведенном выше коде есть много недостатков (например, жестко закодированный тест «только для чтения»), но это всего лишь пример, используемый для иллюстрации того, что вы можете сделать. В DirectoryInfo есть несколько других вспомогательных методов, которые вы можете использовать для отображения файлов в папке. Если у вас нет доступа, Методы выдают исключение UnauthorizedAccessException , которое можно использовать для проверки причины сбоя доступа. Ознакомьтесь с информацией о GetAccessControl для получения дополнительной информации об исключениях, которые он генерирует.

10
ответ дан 18 December 2019 в 14:51
поделиться

Самый надежный способ определения того, имели ли вы разрешение на чтение с поделиться с

  1. Попробовать и прочитать с общего ресурса
  2. Обрабатывать ошибки, которые могут возникнуть при чтении, и считать, что неудачная попытка

К сожалению, хотя на основании вашего описания вы пытаетесь определить, будет ли у вас разрешение на чтение для публикации. Нет надежного способа определить это.

Независимо от того, сколько ACL, каталогов и т. Д. Вы смотрите на момент, когда вы закончите, просматривая их, вы можете потерять доступ к общему ресурсу с помощью любого количества механизмов. Наиболее очевидным является снижение доли сети. Все, что вы можете определить, это то, что вы имели разрешение на общий ресурс.

3
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: