Код, не работающий для универсального типа vector< T> В C++
Я пытаюсь отправить изображения на сервер. Раньше у меня была простая функция
void fileSend(const char* fpath)Эта функция способна отправить один файл изображения на сервер. Но, я должен отправить много изображений на сервер сразу, поэтому я пошел на vector<t>. Я перегружал предыдущий метод с помощью
void fileSend(const vector<string>& fnames)Но теперь программа резко останавливается, не посылая никаких изображений. Я пытался найти проблему, но не могу понять, что происходит. Он не работает
void fileSend(const vector<string>& fnames)когда я вызываю перегруженный метод
fileSend(fnames[k].c_str());Пожалуйста помочь
Что я уже пробовал:
void fileSend(const 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); } void fileSend(const vector<string>& fnames) { for (int k = 0; k < fnames.size(); k++) { fileSend(fnames[k].c_str()); // call the original function } }
Я вызываю эту функцию в main () как:
vector<string> filenames; string path = "C:\\Images:\\"; string imageName; string fullPath; int numberOfImages; while (true) { cout << "Enter the number of images you want to send : "; cin >> numberOfImages; for (int i = 0; i < numberOfImages; i++) { cout << "Select an image:"; cin >> imageName; fullPath = path + imageName; filenames.push_back(fullPath); } client.fileSend(filenames); }
клиент-это объект класса Client, в котором я написал функции fileSend()
CPallini
Вы должны использовать отладчик, чтобы найти проблему.
Richard MacCutchan
Вчера я объяснил вам, что ваш цикл должен быть вокруг вектора и передавать каждое имя файла в функцию отправки по одному.
Member 13123405
@Richard я не понял
Richard MacCutchan
Вы создали вектор, содержащий список имен файлов. Все, что вам нужно сделать, это повторить этот вектор (создать цикл) и передать каждое имя файла функции, которая отправляет его на сервер.