我想将文件从客户端复制到远程服务器,但我不明白如何使用 libssh 库 SFTP API 来执行此操作。
情况是:SSH会话打开了,SFTP会话也打开了,我可以用libssh的集成功能创建一个文件并从客户端写入到服务器。
我没有找到一种简单的方法来使用像sftp_transfer(sourceFile(like c:\my document\hello world.txt),RemoteFile(/home/user/hello world.txt) 这样的简单函数将文件从客户端复制到服务器),对(读写)) ?
根据我从教程中了解到的内容,它首先在远程位置(服务器)中创建一个文件,然后使用这行代码打开这个文件:
file = sftp_open(sftp, "/home/helloworld.txt",access_type,1);
之后在服务器上创建文件,然后用缓冲区写入这个创建的文件:
const char *helloworld = "Hello, World!\n";
int length = strlen(helloworld);
nwritten = sftp_write(file, helloworld, length);
我现在的问题是,如果我有一个文件,例如一个 .doc 文件,并且我想将该文件从远程服务器传输/上传c:\mydocument\document.doc
到远程服务器/home/user/document.doc
,我该如何使用这种方法呢?
如何将此文件放入函数中以像示例函数中的 helloworldsftp_write()
一样发送它?
我可能在编程方面不够好,无法理解,但我真的试图理解它并且我坚持下去。
在此先感谢您的帮助
请参阅下面我用来测试的代码示例:
// Set variable for the communication
char buffer[256];
unsigned int nbytes;
//create a file to send by SFTP
int access_type = O_WRONLY | O_CREAT | O_TRUNC;
const char *helloworld = "Hello, World!\n";
int length = strlen(helloworld);
//Open a SFTP session
sftp = sftp_new(my_ssh_session);
if (sftp == NULL)
{
fprintf(stderr, "Error allocating SFTP session: %s\n",
ssh_get_error(my_ssh_session));
return SSH_ERROR;
}
// Initialize the SFTP session
rc = sftp_init(sftp);
if (rc != SSH_OK)
{
fprintf(stderr, "Error initializing SFTP session: %s.\n",
sftp_get_error(sftp));
sftp_free(sftp);
return rc;
}
//Open the file into the remote side
file = sftp_open(sftp, "/home/helloworld.txt",access_type,1);
if (file == NULL)
{
fprintf(stderr, "Can't open file for writing: %s\n",ssh_get_error(my_ssh_session));
return SSH_ERROR;
}
//Write the file created with what's into the buffer
nwritten = sftp_write(file, helloworld, length);
if (nwritten != length)
{
fprintf(stderr, "Can't write data to file: %s\n",
ssh_get_error(my_ssh_session));
sftp_close(file);
return SSH_ERROR;
}