У меня есть теория, я могу получить размер файла с помощью fseek и ftell и построить динамический массив в качестве буфера. Затем используйте буфер для fgets (). Я в настоящее время не могу придумать способ сделать это.
Моя теория основана на незнании размера первого файла в байтах. Итак, я не знаю, насколько большой буфер для создания. Что делать, если файл превышает 2 гигабайта? Я хочу иметь возможность создать буфер, который будет изменять и распознавать размер файла любого файла, который я поместил в SearchInFile ().
Вот что у меня так далеко внизу:
int SearchInFile(char *fname, char *fname2)
{
FILE *pFile, *pFile2;
int szFile, szFile2;
// Open first file
if( (fopen_s(&pFile, fname, "r")) != NULL )
{
return(-1);
}
// Open second file
if( (fopen_s(&pFile2, fname2, "r")) != NULL )
{
return(-1);
}
// Find file size
fseek(pFile, 0L, SEEK_END);
szFile = ftell(pFile);
// Readjust File Pointer
fseek(pFile, 0L, SEEK_SET);
std::vector <char> buff;
//char buff[szFile];
while(fgets(buff.push_back(), szFile, pFile))
{}
Любые мысли или примеры будут великолепны. Я искал в сети последние несколько часов.
Вектор может расти, поэтому вам не нужно заранее знать размер. Следующие четыре строки делают то, что вы хотите.
std::vector<char> buff;
int ch;
while ((ch = fgetc(pFile)) != EOF)
buff.push_back(ch);
fgetc
это функция для чтения одного символа, проще чем fgets
,
Если вы заранее знаете размер файла, вы можете позвонить buff.reserve(szFile)
перед петлей. Это сделает цикл немного более эффективным.
Других решений пока нет …