Не удается отправить много изображений на сервер с помощью vector< T> В C++
Я меняю сигнатуру функции, имеющей аргумент по умолчанию char*, на векторную строку в C++. Роль функции с аргументом по умолчанию char* состоит в том, чтобы извлечь имя изображения файла изображения, затем прочитать этот файл изображения и отправить его на сервер. Эта функция способна отправлять только один файл изображения. Итак, я пошел за векторной "строкой", чтобы отправить несколько изображений сразу. Но где-то я упускаю что-то, чего не могу найти. Пожалуйста помочь.
Что я уже пробовал:
Функция с параметром по умолчанию char*:
void fileSend(char *fpath) { // Extract only filename from given path. char filename[50]; int i = strlen(fpath); for (; i > 0; i--) { if (fpath[i - 1] == '\\') break; } for (int j = 0; i <= (int)strlen(fpath); i++) { filename[j++] = fpath[i]; } ifstream myFile(fpath, ios::in | ios::binary | ios::ate); int size = (int)myFile.tellg(); myFile.close(); char filesize[10]; itoa(size, filesize, 10); send(sock, filename, strlen(filename), 0); char rec[32] = ""; recv(sock, rec, 32, 0); send(sock, filesize, strlen(filesize), 0); recv(sock, rec, 32, 0); FILE *fr = fopen(fpath, "rb"); while (size > 0) { char buffer[1030]; if (size >= 1024) { fread(buffer, 1024, 1, fr); send(sock, buffer, 1024, 0); recv(sock, rec, 32, 0); } else { fread(buffer, size, 1, fr); buffer[size] = '\0'; send(sock, buffer, size, 0); recv(sock, rec, 32, 0); } size -= 1024; } fclose(fr); }
Функция с параметром по умолчанию vector & lt;string>:
void fileSend(vector<string> fnames) { char *filename; for (int k = 0; k < fnames.size(); k++) { int i = fnames[k].length; for (; i > 0; i--) { if (fnames[k][i - 1] == '\\') break; } for (int j = 0; i <= fnames[k].length(); i++) { filename[j++] = fnames[k][i]; } ifstream myFile(fnames[k], ios::in | ios::binary | ios::ate); int size = (int)myFile.tellg(); myFile.close(); char filesize[10]; itoa(size, filesize, 10); send(sock, filename, strlen(filename), 0); char rec[32] = ""; recv(sock, rec, 32, 0); send(sock, filesize, strlen(filesize), 0); recv(sock, rec, 32, 0); FILE *fr = fopen(fnames[k], "rb"); while (size > 0) { char buffer[1030]; if (size >= 1024) { fread(buffer, 1024, 1, fr); send(sock, buffer, 1024, 0); recv(sock, rec, 32, 0); } else { fread(buffer, size, 1, fr); buffer[size] = '\0'; send(sock, buffer, size, 0); recv(sock, rec, 32, 0); } size -= 1024; } fclose(fr); } }
Richard MacCutchan
Я не могу понять, что должен делать ваш код. Каждая строка в векторе должна содержать имя файла, поэтому все, что вам нужно, - это цикл для извлечения каждого имени файла и передачи его функции, которая отправляет его на сервер.