使用neon WebDAV编辑文件

时间:2014-11-10 14:06:04

标签: c webdav editing

我有一个文件,它在WebDAV服务器上。我想在C上使用neon WebDAV客户端库编辑此文件。我想要的是 - 在默认应用程序中打开此文件的MIME类型,在我完成编辑后,它应该保存所有更改在webdav服务器上。我的操作系统是Windows 7.

我有一些问题。

  • 我应该先将此文件下载到临时目录吗?
  • 有霓虹灯命令吗?
  • 如何知道文件是否已更改?
  • 有没有办法检查" save"点击了按钮?
  • 当我在文件中进行一些更改时,我应该使用什么命令将此更改提交给webdav服务器?

如果有人有简单的例子,请与我分享。

更新

再次感谢你,对此感到抱歉"回答"问题。我试过使用以下代码:

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我直接从我的服务器下载这个文件,而不使用霓虹灯,这个文件的大小与使用ne_get命令下载的文件相同,MS Office完全打开它。

此外,我已尝试使用MS Word创建testdoc.docx,并使用以下代码将其放入我的服务器:

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);

但res为1且错误为:"请求正文文件中的过早EOF"。

1 个答案:

答案 0 :(得分:1)

  

我应该首先将此文件下载到临时目录吗?

是。您需要将文件存储在物理本地文件中。否则,您无法在本地应用程序中打开它。

  

有没有霓虹灯命令呢?

要下载,请使用ne_get(来自neon API)。

使用GetTempPath WinAPI函数查找当前用户的临时目录所在的位置。

  

如何知道文件是否已更改?

请参阅FindFirstChangeNotification WinAPI函数。

或者检查循环中的临时文件最后修改时间戳,等待更改。

  

有没有办法检查是否点击了“保存”按钮?

没有。您所能做的就是检查文件是否已更改。

  

当我在文件中进行一些更改时,我应该使用什么命令将此更改提交给WebDAV服务器?

使用ne_put


不过,这是一个终极目标还是只是大型应用程序的一部分?

如果这是最终目标,那么有些工具可以开箱即用。例如,您可以在关联的应用程序中将WinSCP(其他WebDAV客户端)配置为open a remote file on double-click,并在保存时将其上传回文件。换句话说,WinSCP实现了我上面概述的确切解决方案。 (我是WinSCP的作者)