4

次の行は例外をスローしています。理由はわかりません。

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は、上記のusingステートメントです。

なぜ私がエラーを引き起こしているのかについて誰かが光を当てることができますか?私はディレクトリへの完全な権限を持っており、コンパイルの問題はありません。そのディレクトリに新しいファイルやフォルダを手動で作成することもできます。

- 編集 -

解決策なしで提案されたように、管理者としてVSを実行してみました。

4

2 に答える 2

7

エラーメッセージは、UnauthorizedAccessException開こうとしているファイルを示しています。

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

これはディレクトリ名のように見えます。ディレクトリをファイルとして開くことはできません。

おそらく、ファイル名を追加するのを忘れています。

string filename = Path.Combine(sftpFile.Name, "SomeFile.dat");
using (var output = new FileStream(filename,...)
{
    ...
}
于 2012-09-21T14:09:49.233 に答える
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;
}
于 2014-10-07T18:11:15.150 に答える