SORU
15 AĞUSTOS 2009, CUMARTESİ


Dizin ve dosya izinlerini kontrol yazmak .NET

Benim içinde .NET 2.0 uygulama, eğer yeterli izinlere oluşturmak ve bir dizin için dosya yazmak için varsa kontrol etmek istiyorum. Bu amaçla, bir dosya oluşturmak ve tek bir bayt yazma girişiminde aşağıdaki işlevi, daha sonra kendisi izinleri var olduğunu test etmek için silmek zorundayım.

Aslında bunu denemek için olduğunu kontrol etmek için en iyi yolu, meydana gelen herhangi bir istisna yakalamak düşündüm. Orada daha iyi olsa da genel Durum yakalamak ya da bunu daha fazla kabul gören bir yolu belki de hakkında pek mutlu değilim?

private const string TEMP_FILE = "\\tempFile.tmp";

/// <summary>
/// Checks the ability to create and write to a file in the supplied directory.
/// </summary>
/// <param name="directory">String representing the directory path to check.</param>
/// <returns>True if successful; otherwise false.</returns>
private static bool CheckDirectoryAccess(string directory)
{
    bool success = false;
    string fullPath = directory   TEMP_FILE;

    if (Directory.Exists(directory))
    {
        try
        {
            using (FileStream fs = new FileStream(fullPath, FileMode.CreateNew, 
                                                            FileAccess.Write))
            {
                fs.WriteByte(0xff);
            }

            if (File.Exists(fullPath))
            {
                File.Delete(fullPath);
                success = true;
            }
        }
        catch (Exception)
        {
            success = false;
        }
    }

CEVAP
15 AĞUSTOS 2009, CUMARTESİ


Directory.GetAcessControl(path) için ne soruyorsun.

public static bool HasWritePermissionOnDir(string path)
{
    var writeAllow = false;
    var writeDeny = false;
    var accessControlList = Directory.GetAccessControl(path);
    if (accessControlList == null)
        return false;
    var accessRules = accessControlList.GetAccessRules(true, true, 
                                typeof(System.Security.Principal.SecurityIdentifier));
    if (accessRules ==null)
        return false;

    foreach (FileSystemAccessRule rule in accessRules)
    {
        if ((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) 
            continue;

        if (rule.AccessControlType == AccessControlType.Allow)
            writeAllow = true;
        else if (rule.AccessControlType == AccessControlType.Deny)
            writeDeny = true;
    }

    return writeAllow && !writeDeny;
}

(FileSystemRights.Write & rights) == FileSystemRights.Write bir şey "" bu arada gerçekten okumak istiyorsanız, ne olduğunu biliyor musun diye :) . Flags adlı kullanıyor

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kat Krazy

    Kat Krazy

    12 Kasım 2010
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • SegaAmerica

    SegaAmerica

    5 Mart 2008