我真的試圖尺寸836的文件分配到大小200連續的緩衝區和搜索CR和CRLF字符之間則跳過他們並寫入新文件!連續讀取和刪除字符,然後寫入新文件
文件這樣
CR CRLF 1bb8CR CRLF !DOC...........text text etx> html text ...........text text etx...........text text etx....>CR CRLF 1704CR CRLF texte classes=====.......> .................> CR CRLF 0CR CRLF CR CRLF /EOF
#include <stdlib.h>
#include <stdio.h>
int main()
{
const int BUF_SIZE = 200;
FILE *fptr_in;
FILE *fptr_out;
char buffer[BUF_SIZE + 1]={0};
char CRLF[BUF_SIZE]={0};
char lastChar = '\0';
int i = 0, j = 0, z = 0, n = 0, sub;
size_t result = 0;
long lSize;
if((fptr_in = fopen("LogFile_ProxyBufferContents_FJ_small.html", "r")) == NULL){
printf ("\nError opening file");
return 0;
}
else{
while(fgetc(fptr_in) != EOF){
n++;
}
if(feof(fptr_in)){
printf_s("\nTotal number of bytes read: %d", n);
printf_s(" Bytes.\n");
}
}
if((fptr_out = fopen("LogFile_ProxyBufferContents_Out.html", "w")) == NULL){
fclose(fptr_in);
return 0;
}
// Obtain the File size
fseek(fptr_in, 0, SEEK_END);
lSize = ftell(fptr_in);
rewind(fptr_in);
// Buffer Null check
if(buffer == NULL){
fclose(fptr_in);
return 0;
}
// Read File into Buffer by result size
while((result = fread_s(buffer, bufSize, 1, bufSize, fptr_in)) != 0){
while(i < (long)result){
if(buffer[i] == '\r' && buffer[i + 1] == '\n'){
if(buffer[i + 6] == '\n'){
i += 6;
}
else if(buffer[i + 6] == '\r'){
i += 7;
}
}
else{
sub = z -i;
CRLF[j] = buffer[i];
j++;
}
i++;
}
fclose(fptr_in);
fclose(fptr_out);
//printf("\nBuffer after removing CRLF %s\n", CRLF);
system("pause");
return 0;
}
因此,如果CR CRLF的開頭塊沒有問題,但在不使用緩衝器結束第[i + 6]不能弄清楚?
我的想法是,如果i
和i+1
是true,則檢查是否下一個6 buffer[i] != '\0'
,(我使用6因爲每次保證CR和CRLF之間來到3個或4個字符)如果是的話,例如,如果緩衝器的結束是5 CR和下一個CRLF位於進入下一個緩衝區索引2後,平均指數:緩衝一個:texte ...文本> CR170 \ 0和下一個緩衝區2 4CRCRLF然後HTML的休息...... 我新編程,如何跳到下一個讀取buffer2
並跳過CR之前的字符,並將其他地方的進程工作保存到文件中,對不起我的英文。 請幫忙嗎?
編輯: 也許我還不能正確解釋......我想找到第一CRLF和第二個然後跳過中間的十六進制數,在我的情況下,它是通過代理的套接字緩衝區,有來始終Chunk的長度由CRLF包圍。你能建議我該怎麼做? 如果塊長度進來頂部或中間或最後是好的,但如果塊長度分成一半我堆棧!
++++示例文件: https://drive.google.com/file/d/0Bw62NZwp1GSnaG1ydXVHREZibEE/edit?usp=sharing
您的編碼不符合您的問題說明。你爲什麼檢查緩衝區[I + 6]?這不是你問題描述的一部分。另外:在第3行檢查緩衝區[I + 1]可能會超出緩衝區。 –
謝謝你對我的問題重播,也許我不能正確解釋......我想找到第一個CRLf,然後第二個跳過中間的十六進制數字,在我的情況下它是一個通過代理的套接字緩衝區,由CRLF包圍的Chunk的長度。你能建議我該怎麼做?謝謝 –
分塊的HTML?你想實現什麼?是否想要讀取分塊的HTML流並輸出非分塊的HTML流? –