Есть бинарный файл на треть состоящий из обычных текстовых символов.Естественно что такие ф-ции как strstr strtok и им подобные использовать неудается.Как можно из этого файла "выпотрошить" текст который там содержится?
чет я вопроса не понял... Какая разница какие там символы печатные или нет, ты работаеш с их кодом, поэтому все строковые функции работают. открывай через rb и работай
Я уже так пытался.Вообщем я имею в виду этот файл Х:\Documents and Settings\user\Application Data\ICQ\номераськи\номераськи.FB Если его открывать через fopen(с параметром чтения rb ) и читать fread ,то ниче кроме "AOL Feedbag 1.1" все ф-ции для работы с текстом невидят ЗЫ:файл от оф. асику клиента 6й версии
хз получится или нет потому что код юниховы. Code: #include <stdio.h> #include <fcntl.h> #include <unistd.h> int main() { int d,sz; char buffer[1024]; d=open("путь_к_файлу", O_RDRW); while ((sz=read(d, buffer, 1024))>0) { /*твои действия*/ }; return 0; } а вообще прально. нет разницы какой тип файла когда его открываешь, так что в принципе все должно работать
покажи код. Вот те для примера прога для конвертации бинарных файлов Code: #include <stdio.h> #include <IO.h> #include <stdlib.h> int main(int argc, char *argv[]) { if(argc < 2) return printf("USE: %s file_path\n", argv[0]); FILE *fr, *fw; fr=fopen(argv[1], "rb"); fw=fopen("result.txt", "wb"); if(!fr || !fw) return printf("Open file error\n"); int size=filelength(fileno(fr)); unsigned char c; while(size > 0) { c=fgetc(fr); printf("\\0x%X", c); fprintf(fw, "\\0x%X", c); size--; } fclose(fw); fclose(fr); system("result.txt"); remove("result.txt"); return 0; }
Пример какай то странный .Я его вот так изменил Code: main() { char a[256]; ExpandEnvironmentStrings("%HOMEPATH%",a,256); strcat(a,"\\Application Data\\ICQ\\208190791\\208190791.FB"); FILE *fr, *fw; fr=fopen(a, "rb"); fw=fopen("result.txt", "wb"); int size=filelength(fileno(fr)); unsigned char c; while(size > 0) { c=fgetc(fr); printf("\\0x%X", c); fprintf(fw, "\\0x%X", c); size--; } fclose(fw); fclose(fr); system("result.txt"); remove("result.txt"); return 0; } В и тоге он мне в stdout выдает бесконечный поток \0xFF А вот и мой код Code: #include <windows.h> #include <iostream.h> #include <stdio.h> #include <conio.h> int stf(char *buf=new char[1024*10]) { int sz,n,stop; char a[256]; DWORD szf,rb; char *buf2=new char[1024*10]; ExpandEnvironmentStrings("%HOMEPATH%",a,256); strcat(a,"\\Application Data\\ICQ\\208190791\\208190791.FB"); HANDLE h=CreateFile(a,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL); szf=GetFileSize(h,0); stop=0; ReadFile(h,buf2,szf,&rb,NULL); for(;;) { if(strlen(buf2)>0) { strcat(buf,buf2); buf2+=strlen(buf2); } if(strlen(buf2)==0) { buf2+=1; stop++; } if((strlen(buf))+stop==szf) { break; } } CloseHandle(h); return(szf); } main() { char *a=new char[1024*10]; cout<<stf(a)<<"\n"; printf(a); getch(); } Но он кроме текста выводит ещё кучу левого мусора Может у кого есть идеи как от него исбавится?
не туда копаешь! разберись что есть МУСОР!!!! если мусор это корябушки КОИ-8 отображающиеся в 1251, или наоборот.... или DOS кодировка, то с твоим определением мусора можно не согласится! Ты запросто мог отфильтровать свой ВЫВОД по коду символа обратившись к таблице Пуск->Программы->Стандартные->cлужебные->Таблица символов .... в том то и дело что ты ищешь универсальной перекодировки .... которой не существует, по той причине , что только у символов английского языка "зарезервировано место" а у остальных языков "птичьи права"