2010-04-25 6 views
1

Je crée un programme semblable à un bloc-notes. Pour obtenir le texte d'un fichier que je lis chaque caractère dans la mémoire tampon en faisantPourquoi ifstream ne lit pas à la fin?

while (!file.EOF()) 
{ 
    mystr += file.get(); 
} 

si je charge dans un exe il arrête après MZ mais le Bloc-notes lit tout exe. Je mets mon ifstream en mode binaire mais toujours pas de chance. Qu'est-ce que je fais mal? Merci

Code

: (désordre)

void LoadTextFromString(HWND ctrl, char* dirtypath, bool noquotes) 
{ 
char *FileBuffer; 

char *buf; 

int count; 
count = 0; 

bool hasDot = false; 
vector<int> quotes; 
vector<string> files; 
string temp; 


if (noquotes) 
{ 

    goto noqu; 
} 

while(dirtypath[count] != 0) 
{ 
    if (dirtypath[count] == 34) 
    { 
     quotes.push_back(count); 
    } 
    count +=1; 
} 
if (quotes.size() < 3 || quotes.size() % 2 != 0) 
{ 
    return; 
} 

for (int i = 0; i < quotes.size(); i += 2) 
{ 

    temp = ""; 
    for (int j = quotes[i] + 1; j < quotes[i + 1]; ++ j) 
    { 
     temp += dirtypath[j]; 
    } 

    files.push_back(temp); 
} 

for(int i = 0; i < files.size(); ++i) 
{ 
noqu: 
if (!noquotes) 
{ 
FileBuffer = (char*)files[i].c_str(); 
} 
else 
{ 
FileBuffer = dirtypath; 
} 



ifstream *tf; 
tf = new ifstream(FileBuffer,ios::binary); 

ifstream *file; 
file = new ifstream(FileBuffer,ios::binary); 
if(file->fail()) 
{ 
    return; 
} 
int thelength; 
thelength = 0; 

while (!tf->eof()) 
{ 
    if (tf->get() == 10) 
    { 
     thelength +=1; 
    } 

    thelength +=1; 
} 
tf->close(); 

if(thelength == 0) 
{ 
    SetWindowTextA(ctrl,""); 
    return; 
} 
buf = new char[thelength + 1]; 

int lenn; 
lenn = 0; 
char cr ; 
cr = 10; 
char tmp; 

while (!file->eof()) 
{ 

    buf[lenn] = file->get(); 
    if (buf[lenn] == cr) 
    { 
     tmp = 13; 
     buf[lenn] = tmp; 

     buf[lenn + 1] = cr; 
     lenn += 1; 
    } 
    lenn += 1; 



} 
buf[lenn - 1] = 0; 

file->read(buf,lenn); 
SetWindowTextA(ctrl,buf); 
file->close(); 

} 
delete(buf); 

} 
+0

Qu'est-ce que MZ? Comment savez-vous qu'il ne lit pas à la fin? – WhirlWind

+0

bien MZ est la version acii de l'en-tête PE exe, mais il ne lit pas au-delà (IE il le voit comme fin de ligne) – jmasterx

+1

S'il vous plaît montrer le code que vous avez utilisé pour ouvrir le fichier. En outre, isftream a 'eof', pas' EOF'; est-ce une faute de frappe, ou est-ce que quelque chose d'autre se passe ici? –

Répondre

3

si je charge dans un exe il arrête après MZ

un fichier de type .exe peut contenir toutes sortes de octets même 0, vous devez vérifier la valeur d'octet avant d'ajouter à la chaîne.

concernant MZ

+0

oublié de vérifier null, merci – jmasterx

Questions connexes