Нет такого файла Когда JSch mkdir вызывается [дубликат]

Отсутствует «extern» в объявлениях / определениях переменной const (только для C ++)

Для людей, прибывающих с C, может показаться неожиданным, что в C ++ глобальные переменные const имеют внутренние (или статические) связь. В C это не так, поскольку все глобальные переменные неявно extern (т.е. когда отсутствует ключевое слово static).

Пример:

// file1.cpp
const int test = 5;    // in C++ same as "static const int test = 5"
int test2 = 5;

// file2.cpp
extern const int test;
extern int test2;

void foo()
{
 int x = test;   // linker error in C++ , no error in C
 int y = test2;  // no problem
}

correct would использовать файл заголовка и включить его в file2.cpp и file1.cpp

extern const int test;
extern int test2;

. В качестве альтернативы можно было бы объявить переменную const в файле file1.cpp с явным extern

0
задан Ankit Lamba 7 February 2014 в 12:43
поделиться

3 ответа

Наконец, я это сделал.

Вот как я добился успеха:

try {
            channelTarget.put(get, completeBackupPath + fileName);
        } catch (SftpException e) {
            System.out.println("Creating Directory...");
            String[] complPath = completeBackupPath.split("/");
            channelTarget.cd("/");
            for (String dir : complPath) {
                if (folder.length() > 0) {
                    try {
                        System.out.println("Current Dir : " + channelTarget.pwd());
                        channelTarget.cd(folder);
                    } catch (SftpException e2) {
                        channelTarget.mkdir(folder);
                        channelTarget.cd(folder);
                    }
                }
            }
            channelTarget.cd("/");
            System.out.println("Current Dir : " + channelTarget.pwd());
            channelTarget.put(get, completeBackupPath + fileName);
        }
1
ответ дан Ankit Lamba 1 September 2018 в 03:34
поделиться
    public static void mkdirs(ChannelSftp ch, String path) {
    try {
        String[] folders = path.split("/");
        if (folders[0].isEmpty()) folders[0] = "/";
        String fullPath = folders[0];
        for (int i = 1; i < folders.length; i++) {
            Vector ls = ch.ls(fullPath);
            boolean isExist = false;
            for (Object o : ls) {
                if (o instanceof LsEntry) {
                    LsEntry e = (LsEntry) o;
                    if (e.getAttrs().isDir() && e.getFilename().equals(folders[i])) {
                        isExist = true;
                    }
                }
            }
            if (!isExist && !folders[i].isEmpty()) {
                ch.mkdir(fullPath + folders[i]); 
            }
            fullPath = fullPath + folders[i] + "/";
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Я использовал эту реализацию для создания вложенных папок.

Я старался не использовать Exception. Имейте в виду, что файловая система основана на Linux. OP уже нашел решение, но я хотел добавить к нему. Просто я делаю mkdir, если папка, которую я хотел создать, не существует в результате «ls».

0
ответ дан donkeysmash 1 September 2018 в 03:34
поделиться

Я не думаю, что вы хотите сделать в SFTP-протоколе. Вам нужно будет создать каждый подкаталог по очереди.

0
ответ дан mikea 1 September 2018 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: