我正在寫一個C++的小型DLL,它將從Web服務器上下載一個文件。下載部分工作正常,但是當我去寫磁盤上的文件時,它會在每一行上添加額外的字符。fstream正在爲我的文件的每一行添加字符?
當我在Notepad ++中查看原始文件(複製到Web服務器上的文件)時,我可以看到它在每行的末尾都有CR和LF(回車和換行)字符應該。在保存的版本,雖然中,代替
line of textCRLF
它看起來像
line of textCR
CRLF
CR
CRLF
Another line of text...
我一直沒能找到什麼導致它。 (o)fstream是否存在某種問題?
extern "C" void TCP_get_file(char *server, char *path, char *filename){
ofstream logfile("Crashlog.txt");
WSAData wsadata;
if ((WSAStartup(MAKEWORD(2, 2), &wsadata)) != 0){
logfile << "Error starting winsocks." << endl;
WSACleanup();
return;
}
int status, sock, received;
struct addrinfo hints, *servinfo;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(server, "http", &hints, &servinfo)) != 0){
logfile << "Error getting server info: " << gai_strerror(status) << endl;
WSACleanup();
freeaddrinfo(servinfo);
return;
}
sock = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
connect(sock, servinfo->ai_addr, servinfo->ai_addrlen);
string request = string("GET ") + path + " HTTP/1.0\nhost: " + server + "\r\n\r\n";
if (send(sock, request.c_str(), strlen(request.c_str()), 0) == -1){
logfile << "Error sending request to server." << endl;
freeaddrinfo(servinfo);
closesocket(sock);
WSACleanup();
return;
}
char filebuffer[5000];
string full, file;
while ((received = recv(sock, filebuffer, 4999, 0)) > 0){
full.append(filebuffer, received);
ZeroMemory(filebuffer, 4999);
}
full.push_back("\0");
int offset = full.find("\r\n\r\n") + 4;
file.assign(full, offset, full.size());
ofstream savefile(filename);
savefile << file;
savefile.flush();
savefile.close();
freeaddrinfo(servinfo);
closesocket(sock);
WSACleanup();
return;
}
這看起來比'C++'更給我'C' – user2485710
當你用一個調試器完成它時,在哪個階段添加額外的換行符? –