21 Comments

C语言中gets函数处理含有空格的文件夹

最近阳光写了一个工具,主要功能是从一个ini的文本文件里面提取几个字段,然后将这个内容写入到一个同名的txt文件里面去。虽然是一个小工具,但是在写的过程中也遇到些比较棘手的问题。这里写下来一方面是为了记录下,另一方面如果有相同问题的朋友可以少折腾下。

1.如果源文件夹名称包含空格比如:“Program Files”那么使用gets函数的时候gets函数会在有空格文件夹的时候加上””,本来是好事情的,但是我在调试有空格文件夹的是发现,遇到有空格的文件夹都会在文件夹的前面加上2个““””这就导致了源文件夹有空格时直接报错。

处理方式其实很简单,我们只要在发现有2个””的时候给他删掉多余的就可以了

代码如下:

char newname[szSTR], name[szSTR], line[szSTR], final[szSTR], *s;
     gets(name);
//先吧newname的值为空
     memset(newname,0×0,szSTR);
     if ( name[0] != ‘"’ )
     {
        strcpy(newname,name);         //将name的值copy给newname
     }
     else
     {
         strncpy(newname,&name[1],strlen(name)-2);         

//将name的值拷贝给newname的时候减去2为也就是""
     }

2.第二个问题就是,源文件里面的MAC地址格式是[0005DD2DEF2E]这样的,但是在系统虚拟盘的导入功能中只能识别[00:05:DD:2D:EF:2E或者[00-05-DD-2D-EF-2E]这样的标注MAC地址书写格式,所以在提取的时候还需转换下格式

代码如下:

//判断[]里面的内容是否是12位(加上[]是15位),如果是将[]去掉,并且每2位中间加:分隔开

char szMac[32] = {0};   
    int nLineLen = strlen(line);
    if (strstr(line, "[") && strlen(line) == 15)
    {
        int nCount = 0;
        int nNum = 0;
        for (int i=0; i<15; ++i)
        {
            if ('[' == line[i] || ‘]’ == line[i])
            {
                continue;
            }

            szMac[nCount++] = line[i];
            nNum++;

            if (2 == nNum)
            {
                nNum = 0;
                szMac[nCount++] = ‘:’;
            }

 

3.当我将源文件放到桌面上的时候,发现不可用。每次都失败,调试的时候发现,我的源文件的文件名类型是.ini的,而桌面路径中“C:\Documents and Settings\Administrator\桌面”Administrator居然包含了ini,结果导致程序在这里的时候就截断了

处理方式就是在代码中不要写ini而是写.ini就搞定了。很简单吧!





你可能也会喜欢这些文字

发表在: 开发coding 标签为: , . - 永久链接.

21 Responses to C语言中gets函数处理含有空格的文件夹

  1. what does says:

    hi wats your myspace page

  2. mxn says:

    gets好像真的是家里一个“”了,以前也遇到过的

  3. iznreqb says:

    Google上面搜索过来的

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>