2
votes

I'm creating a directory on a specified location and then I'm trying to access it with a StreamWriter, but it keeps saying "Access is denied."

Does anyone have any idea of what might be happening?

My code is this:

    if (!Directory.Exists(dirPath))
        Directory.CreateDirectory(dirPath);
    var a = HasWritePermissionOnDir(dirPath); <- This is only here to see if the value is true and it is.
    tw = new StreamWriter(dirPath);

    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;
    }

Full stacktrace:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) at System.IO.StreamWriter.CreateFile(String path, Boolean append) at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) at System.IO.StreamWriter..ctor(String path) at AlertDemoSolution.MySqlUnitTest.TestMethod1() in C:\Temp\AlertDemoSolution\AlertDemoSolution\AlertDemoSolution\MySqlUnitTest.cs:line 23

2
What do you expect that code to write to?SLaks

2 Answers

5
votes

StreamWriter writes to a file.
You can't write to a directory.

You probably want to create a file in the directory.

2
votes

You can't point a StreamWriter at a directory. You need to point it at a FileStream for a file inside that directory.