Я передаю файл из Linux в Windows, используя библиотеку libssh в режиме SFTP, используя C++ в Windows.«Permission denied» при открытии файла для записи второй раз
Я могу создать файл на стороне Windows, и писать в нем на этот раз с помощью этой программы:
int sftp_read_sync(ssh_session session, sftp_session sftp)
{
int access_type;
sftp_file file;
char* buffer[MAX_XFER_BUF_SIZE];
int nbytes, nwritten, rc;
int fd;
access_type = O_RDONLY;
file = sftp_open(sftp, "/root/bel1.txt",
access_type, 0);
if (file == NULL) {
fprintf(stderr, "Can't open file for reading: %s\n",
ssh_get_error(session));
return SSH_ERROR;
}
fd = open("C:\\Users\\Wipro\\Desktop\\bel6.txt", O_WRONLY | O_CREAT | O_TRUNC);
if (fd < 0) {
fprintf(stderr, "Can't open file for writing: %s\n",
strerror(errno));
return SSH_ERROR;
}
for (;;) {
nbytes = sftp_read(file, buffer, sizeof(buffer));
if (nbytes == 0) {
break; // EOF
} else if (nbytes < 0) {
fprintf(stderr, "Error while reading file: %s\n",
ssh_get_error(session));
sftp_close(file);
return SSH_ERROR;
}
nwritten = write(fd, buffer, nbytes);
if (nwritten != nbytes) {
fprintf(stderr, "Error writing: %s\n",
strerror(errno));
sftp_close(file);
return SSH_ERROR;
}
}
rc = sftp_close(file);
if (rc != SSH_OK) {
fprintf(stderr, "Can't close the read file: %s\n",
ssh_get_error(session));
return rc;
}
return SSH_OK;
}
На повторном запуске того же программы, я получаю сообщение об ошибке:
Can't open file for writing: Permission denied
файл создан не имеющий разрешение на переписывание в нем.
Как это исправить?
Во второй раз, когда вы получаете эту ошибку, может быть «файл по-прежнему используется другим процессом». вы должны убедиться, что вы выпускаете файл после выполнения своих операций. –
Вопрос не имеет ничего общего с sftp или libssh, поскольку вы получаете ошибку при работе с локальным файлом. –