无法将文本文件中的行读入字符串

时间:2012-11-15 05:59:28

标签: c++ string file sockets line

我有一个看起来像这样的文本文件

用户1 |密码1
用户2 |密码2

我有一个字符串,说“user1 | password1”。我需要将文本文件的每一行与此字符串进行比较。

    FILE *fp;
    fp = fopen("user_info_file.txt", "r");
    while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}

然后继续strcmp。我使用write函数,因为我有一台服务器将其写入客户端。

我只是将15作为一个随机值(它在界限内)来查看是否正在读取任何文本。但是当它打印str时,well str不包含任何东西。它只是打印为“STR:”,然后我将我的提示返回到下一行。

请告诉我如何将user_info_file.txt(至少第一行)中的数据读入str。我花了好几个小时,但我似乎无法得到它。新手在这里,请耐心等待。

编辑: 基本上我正在创建一个IM应用程序。用户通过输入用户名和密码进行注册,该用户名和密码被发送到服务器,服务器以上面写的形式将其存储在user_info_file中。用户注册后,他们需要能够登录。他们输入用户名和密码,我再次发送到服务器。然后我需要服务器将此字符串与user_info_file中的现有条目进行比较以验证登录。所以我需要服务器检查user_info_file的每一行,并将其与用户输入的内容进行比较。

所以我有

char* str = new char[256];
    FILE *fp;
    fp = fopen("user_info_file.txt", "r");
    while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}
    if(strcmp(buffer, str) == 0)
        n = write(newsockfd, "Logged in", 9);
    else
        n = write(newsockfd, "No such username", 16);

基本上我试图将每行user_info_file读入str。然后我在每个读取行与缓冲区之后比较str。 buffer存储客户端发送的登录信息。如果它们匹配,则登录应该成功。

但是,当我写str时,它不会打印任何东西。 15是str应该写的字符数,对吗?因此,即使数字是5,它也应该打印至少“user1”或“user2”或者user_info_file的SOME行的前5个字符。但看起来并没有任何东西可以从文件中读取到str中。

我希望我已经说清楚了。我能做什么?我的智慧结束了。

1 个答案:

答案 0 :(得分:0)

我不认为在你的情况下使用 fgets 函数从char读取文件char很方便。 我建议你使用 fscanf 为你提供更多的机会:比如同时阅读不同格式的值。 在这里,我得到了一些代码snipet,以演示如何使用fscanf从文件中获取所需信息:

int main(void)
{
    char str[256];
    char checkLogin[256];
    char checkPassword[256];
    FILE *fp = fopen("user_info_file.txt", "r");
    /*while(fgets(str, 10, fp)!=NULL){
    n = write(newsockfd, "STR:", 4);
    n = write(newsockfd, str, 15);}*/
    int scanSucceed = 1;
    do
    {
        scanSucceed = fscanf(fp,"%s|%s ", checkLogin, checkPassword); 
        if (!strcmp(checkLogin, buffer))
        {
        // in case if password for that login match
            if (!strcmp(checkPassword, password))
            {
                ValidLogin = true;
                scanSucceed = -1; // exit from while loop
            }
        }
    }
    while(scanSucceed != -1); // while string was read
}