В вашем коде есть некоторые проблемы:
вы должны использовать ungetc()
вместо fseek()
для возврата на один символ, чтобы избежать сбоя в потоках, которые не поддерживают поиск.
вы должны написать (check == '(')
вместо жесткого кодирования значения символа ASCII. Это и более портативный и более читаемый.
Чтобы избежать неопределенного поведения, вы должны проверить EOF
и fscanf()
успешный анализ. На самом деле, это позволило бы избежать необходимости теста на check
.
Когда вы анализируете листовой узел, вы не должны рекурсировать и анализировать дополнительные узлы ниже текущего.
index
кажется избыточным, так как последовательности узлов должно быть достаточно, чтобы полностью определить, где остановиться.
Вот модифицированная версия:
Node *constructTreeHelper(FILE *infile, int *index) {
double lwire, rwire;
int sink;
double cap;
Node *node;
// Base case
if (*index <= 0) {
// This test seems redundant with the file contents */
return NULL;
}
// this fscanf will fail on the byte byte if it is not a '('
if (fscanf(infile, " (%le %le)", &lwire, &rwire) == 2) {
// If the node is not a leaf node
node = createNode(0, 0, lwire, rwire);
*index -= 1;
node->right = constructTreeHelper(infile, index);
node->left = constructTreeHelper(infile, index);
} else if (fscanf(infile, "%d(%le)\n", &sink, &cap) == 2) {
// If the node is a leaf node
node = createNode(sink, cap, 0, 0);
*index -= 1;
} else {
// invalid format or end of file */
node = NULL;
}
return node;
}
Рассмотрение API FTP здесь:
http://us.php.net/manual/en/function.ftp-rename.php
Там, кажется, не способ получить что-либо кроме TRUE или FALSE.
Однако Вы могли использовать ftp_raw, чтобы отправить необработанную команду RENAME и затем проанализировать возвращенное сообщение.