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

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Rickymon Tero

    Rickymon Ter

    1 Ocak 2007
  • Turkish Airlines

    Turkish Airl

    11 AĞUSTOS 2006