0

詳しく説明しましょう。リモート FTP サーバーからファイルをダウンロードし、その末尾に 1 行追加してから、再アップロードするプログラムを作成しようとしています。ファイル操作は機能し、テキストがファイルに追加されて再アップロードされますが、ファイルを再度ダウンロードすると、テキストは追加されませんでした。これを実証するために、小さなテスト プログラムを作成しました。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機能にあるということです。なぜこれが起こっているのかを突き止めるために人道的に可能な限りのことをしてきましたが、役に立ちませんでした。これが機能しない理由について誰かが何か知っているなら、私は知りたいです。私はこのプログラムを書くためにお金をもらっています。すぐに解決策を見つけなければならないことはわかっています...

4

1 に答える 1

0

download() 関数で「short_database」も「file_to_write」も使用していません。したがって、musiclist.txt の代わりに ftp サーバーから /tmp/musiclist.txt をダウンロードします。

定義を確認する必要があります。また、定義を使用するとき、文字列変数を使用するとき、およびパラメーターを使用するとき

#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
  };
于 2013-07-07T14:12:10.910 に答える