对使用libcurl下载的文件所做的更改不会生效

时间:2013-07-07 11:36:59

标签: c macos libcurl

让我更详细地解释一下。我正在尝试编写一个从远程FTP服务器下载文件的程序,在它的末尾附加一行,然后重新上传它。文件操作工作,文本被附加到文件并重新上传,但是当我再次下载文件时,没有附加文本。我写了一个小测试程序来证明这一点;这是Pastebin的代码:

http://pastebin.com/r07TkxEK

程序在初始运行和后续运行::

上打印以下输出
Remote URL: ftp://orangesquirrels.com
Got data.
Local data file size: 678 bytes.
Current position in file: 678
Uploading database file back to server...
Local data file size: 690 bytes.
Remote URL is ftp://orangesquirrels.com !
*** We read 690 bytes from file.

如果程序有效,后续运行的输出应为

Remote URL: ftp://orangesquirrels.com
Got data.
Local data file size: 690 bytes.
Current position in file: 690
Uploading database file back to server...
Local data file size: 702 bytes.
Remote URL is ftp://orangesquirrels.com !
*** We read 702 bytes from file.

因为数据被写入文件并重新上传(我知道这是因为上传的文件比下载的文件更大)我假设上传工作;我怀疑问题在于下载过程和/或curl_database_write功能。我一直在做一切人道的事情,找出为什么会发生这种情况,但无济于事。如果有人知道任何关于为什么这不起作用,我很想知道。我有报酬写这个程序,我知道我必须尽快找到解决方案......

1 个答案:

答案 0 :(得分:0)

您在download() - 函数中没有使用“short_database”或“file_to_write”。所以你从ftp-server而不是musiclist.txt下载/tmp/musiclist.txt。

你应该检查你的定义,当你使用一个define,当你使用一个stringvariable和你使用参数时

#define DATABASE_FILE "/tmp/musiclist.txt"
#define REMOTE_DATABASE_FILE "musiclist.txt"

int main() {
  remove(DATABASE_FILE);
  download(DATABASE_FILE, "musiclist.txt", REMOTE_URL, "Testing 123");
  //                         ^^^ should't this be REMOTE_DATABASE_FILE?
  ...
}

void download(const char* file_to_write, const char* short_database, const char* addr, const char* msg) {
  remove(DATABASE_FILE);    // again?!?

  struct FtpFile ftpfile={
      DATABASE_FILE, /* name to store the file as if succesful */
//    ^^^ which one? file_to_write or short_database
      NULL
  };