例外:使用FileStream时拒绝访问

时间:2012-09-21 13:58:39

标签: c#

以下行引发异常。我不知道为什么。

using (var output = new FileStream(sftpFile.Name, FileMode.Create,FileAccess.ReadWrite))

例外是:

Error: System.UnauthorizedAccessException: Access to the path 'C:\Users\roberth\
Programming_Projects\Common\UI\bin\Debug' is denied.
   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, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
   at CWD.Networking.DownloadFromSftp(String hostname, String user, String passw
ord, Int32 port, String localPath, String remotePath, String filename) in c:\Use
rs\roberth\Programming_Projects\Common\Common\Common.cs:line 566

第566行是上面的使用声明。

有人可以解释为什么我可能会触发错误吗?我对该目录拥有完全权限,没有编译问题,我也可以在该目录中手动创建新文件和文件夹。

- 编辑 -

我尝试按管理员的身份运行VS,但没有解析。

2 个答案:

答案 0 :(得分:6)

UnauthorizedAccessException错误消息告诉您正在尝试打开的文件:

C:\Users\roberth\Programming_Projects\Common\UI\bin\Debug

这看起来像目录名:您无法将目录作为文件打开。

您可能忘记附加文件名:

string filename = Path.Combine(sftpFile.Name, "SomeFile.dat");
using (var output = new FileStream(filename,...)
{
    ...
}

答案 1 :(得分:2)

您需要使用类似于以下内容的内容:

private bool EnviarArchivoSFTP(string PuertoSFTP, string UrlFTP, string CarpetaFTP, string UsuarioFTP, string PasswordFTP, string FicheroFTP, string nombreArchivo)
{
    bool archivoEnviado = false;

    using (var client = new SftpClient(UrlFTP, int.Parse(PuertoSFTP), UsuarioFTP, PasswordFTP))
    {
        client.ConnectionInfo.Timeout = TimeSpan.FromSeconds(1);
        client.OperationTimeout = TimeSpan.FromSeconds(1);
        client.Connect();
        client.ChangeDirectory(CarpetaFTP);

        string dataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
        string appFile = Path.Combine(dataPath, FicheroFTP, nombreArchivo);//Se brindan permisos full sobre la carpeta

        using (var fileStream = new FileStream(appFile, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            client.BufferSize = 4 * 1024; // bypass Payload error large files
            client.UploadFile(fileStream, Path.GetFileName(nombreArchivo));
            archivoEnviado = true;
        }
    }
    return archivoEnviado;
}