c语言 上传下载文件代码
时间: 2024-10-19 20:12:15 浏览: 45
在C语言中,上传和下载文件通常需要使用到操作系统提供的库函数,如标准库中的`fopen()`, `fclose()`, `fwrite()` 和 `fread()` 等。以下是一个简单的示例,展示了如何读取本地文件并将其内容写入另一个文件(下载),以及相反的过程(上传):
**上传文件(将本地文件内容写入另一文件):**
```c
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s source_file destination_file\n", argv[0]);
return 1;
}
FILE *src = fopen(argv[1], "rb"); // 以二进制模式打开源文件
if (!src) {
perror("Failed to open source file");
return 1;
}
FILE *dest = fopen(argv[2], "wb"); // 以二进制模式创建目标文件
if (!dest) {
perror("Failed to create destination file");
fclose(src);
return 1;
}
size_t bytes_read;
char buffer[4096]; // 可以调整缓冲区大小
while ((bytes_read = fread(buffer, 1, sizeof(buffer), src)) > 0) {
fwrite(buffer, 1, bytes_read, dest); // 将数据从源复制到目标
}
fclose(src);
fclose(dest);
printf("File upload successful.\n");
return 0;
}
```
**下载文件(将远程文件内容保存至本地文件):**
这个过程涉及到网络编程,你需要使用socket、libcurl等网络库。下面是一个基本的网络请求示例,假设我们使用的是libcurl:
```c
#include <curl/curl.h>
#include <stdio.h>
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
FILE *stream = userdata;
return fwrite(ptr, size, nmemb, stream);
}
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s url target_file_path\n", argv[0]);
return 1;
}
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (!curl) {
fprintf(stderr, "Could not initialize cURL\n");
return 1;
}
FILE *file = fopen(argv[2], "wb"); // 创建目标文件
if (!file) {
perror("Failed to open target file");
curl_easy_cleanup(curl);
return 1;
}
curl_easy_setopt(curl, CURLOPT_URL, argv[1]); // 设置URL
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); // 定义回调函数处理响应数据
curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); // 写入到文件
res = curl_easy_perform(curl); // 发送请求
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
fclose(file);
curl_easy_cleanup(curl);
return 1;
}
curl_easy_cleanup(curl);
fclose(file);
printf("File download successful.\n");
curl_global_cleanup();
return 0;
}
```
阅读全文