簡體   English   中英

例外:使用FileStream時拒絕訪問

[英]Exception: Access Denied when using FileStream

以下行拋出異常。 我不知道為什么。

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,沒有解決方案。

UnauthorizedAccessException錯誤消息告訴您正在嘗試打開的文件:

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

這看起來像目錄名稱:您無法將目錄作為文件打開。

您可能忘記附加文件名:

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

您需要使用類似於以下內容的內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM