2014-11-10 3 views
1

У меня есть файл, он находится на сервере WebDAV. Я хочу отредактировать этот файл с помощью клиентской библиотеки neon WebDAV на C. Что мне нужно - откройте этот файл в приложении по умолчанию для его типа MIME, и после того, как я закончу редактирование, он должен сохранить все изменения на сервере webdav. Моя ОС - Windows 7.Редактировать файл, используя neon WebDAV

У меня есть некоторые вопросы.

  • Следует ли сначала загрузить этот файл в папку temp?
  • Есть ли какая-нибудь неоновая команда для этого?
  • Как узнать, был ли файл изменен?
  • Есть ли способ проверить, была ли нажата кнопка «Сохранить»?
  • Когда я сделаю некоторые изменения в файле, какую команду я должен использовать для фиксации изменений на сервере webdav?

Если у кого-то есть простой пример, пожалуйста, поделитесь им со мной.

Update

Еще раз спасибо, и извините за это "ответ" вопрос. Я пытался использовать следующий код:

do { 
     fd = open("c:\\temp\\testdoc.docx", O_CREAT | O_RDWR, _S_IREAD | _S_IWRITE); 
    } while (fd == -1 && errno == EINTR); 
    if (fd == -1) { 
     const char *const errmsg = strerror(errno); 
     fprintf(stderr, "%s: %s.\n", "c:\\temp\\testdoc.docx", errmsg); 
     exit(1); 
    } 
     res =ne_get(sess, "/webdav/test/testdoc.docx", fd); 
_close(fd); 

Но я все еще получаю, когда я пытаюсь «Сожалеем Мы можем не открывать testdoc.docx, потому что мы обнаружили проблему с его содержимым.» чтобы открыть его с помощью MS Word. Wern я загружаю этот файл непосредственно с моего сервера, не используя neon, этот файл имеет тот же размер, что и файл, который был загружен с помощью команды ne_get, и MS Office отлично открывает его.

Кроме того, я пытался создать testdoc.docx с помощью MS Word, и поместить его в мой сервер, используя следующий код:

do { 
     fd = open("c:\\temp\\testdoc.docx", O_CREAT | O_RDWR, _S_IREAD | _S_IWRITE); 
    } while (fd == -1 && errno == EINTR); 
    if (fd == -1) { 
     const char *const errmsg = strerror(errno); 
     fprintf(stderr, "%s: %s.\n", "c:\\temp\\testdoc.docx", errmsg); 
     exit(1); 
    } 
     res =ne_put(sess, "/webdav/test/testdoc.docx", fd); 
_close(fd); 

Но УЭ 1 и ошибок: «Преждевременный конец файла в запросе body file ".

ответ

1

Следует ли сначала загрузить этот файл в папку temp?

Да. Необходимо сохранить файл в физическом локальном файле. В противном случае вы не сможете открыть его в локальном приложении.

Есть ли какая-нибудь неоновая команда для этого?

Для загрузки используйте ne_get (из неонового API).

Используйте функцию WinAPI GetTempPath, чтобы узнать, где находится временный каталог текущего пользователя.

Как узнать, был ли изменен файл?

См. Функцию WinAPI FindFirstChangeNotification.

Альтернативно проверяйте временную метку временной метки последнего файла в цикле, ожидая изменения.

Есть ли способ проверить, была ли нажата кнопка «Сохранить»?

Нет. Все, что вы можете сделать, это проверить, был ли файл изменен.

Когда я внесу некоторые изменения в файле, какую команду я должен использовать для фиксации этих изменений на сервере WebDAV?

Используйте ne_put.


Btw, это конечная цель или просто часть более крупного приложения?

Если это конечная цель, есть инструменты, которые могут делать это из коробки. Например, вы можете настроить WinSCP (клиент WebDAV среди других) на open a remote file on double-click в связанном приложении и загрузить его обратно на сохранение. Другими словами, WinSCP реализует точное решение, описанное выше. (Я являюсь автором WinSCP)