0

我有这个理论,我可以使用 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))
    {


    }

任何想法或例子都会很棒。过去几个小时我一直在网上搜索。

4

1 回答 1

1

矢量可以增长,因此您不必事先知道大小。以下四行可以满足您的需求。

std::vector<char> buff;
int ch;
while ((ch = fgetc(pFile)) != EOF)
    buff.push_back(ch);

fgetc是一个读取单个字符的函数,比使用fgets.

如果您事先知道文件大小,那么您可以buff.reserve(szFile)在循环之前调用。这将使循环更有效率。

于 2012-11-10T13:13:56.063 回答