在C中查找文件目录和文件名

时间:2014-04-11 06:27:09

标签: c

我在显示文件目录时遇到问题。我使用_splitpath函数来剪切文件方向和文件名。然后,我使用strcat来连接驱动器名称和目录。我也用这个函数作为文件名,它很好。我注意到我不能直接连接到驱动器,因为驱动程序的缓冲区大小只有3.所以,我将驱动器连接到另一个字符数组,然后与目录连接。这就是问题所在。当我放置断点并进行调试时,_splitpath行之后会出现异常。我不知道如何修复它,请帮我解决我的问题。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
    char szPath[256] = {NULL};          
    char cDirCheck = '\\';                  
    char szDrive[_MAX_DRIVE] = {0};
    char szDir[_MAX_DIR] = {0};
    char szFileName[_MAX_FNAME] = {0};
    char szExt[_MAX_EXT] = {0};
    char pszPath[256] = {NULL};
    char* pszFname = NULL;

     if(cDirCheck != NULL) {
        _ splitpath(argv[0], szDrive, szDir, szFileName, szExt);
        strcat(pszPath, szDrive);
        strcat(pszPath, szDir);
        pszFname = strcat(szFileName, szExt);
        printf("\nUsage: %s fileName\n", pszFname);
        printf("EXE Path:%s", pszPath\n);
     } else {                       
        printf("\nUsage: %s fileName\n", argv[0]);
        printf("EXE Path : Current Folder\n");
    }
   return 0;
}

您可能认为文件路径和文件名输出正确,但else语句的最后一个printf只显示“EXE Path:”。我也不知道为什么会这样。请给我一些想法。关于......

1 个答案:

答案 0 :(得分:0)

试试这个。这是程序的精简版,显示实际发生的情况:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[]) 
{
    char szDrive[_MAX_DRIVE] = {0};
    char szDir[_MAX_DIR] = {0};
    char szFileName[_MAX_FNAME] = {0};
    char szExt[_MAX_EXT] = {0};

    _splitpath(argv[0], szDrive, szDir, szFileName, szExt);

    printf ("argv[0]    = %s\n\n", argv[0]) ;
    printf ("szDrive    = %s\n", szDrive) ;
    printf ("szDir      = %s\n", szDir) ;
    printf ("szFileName = %s\n", szFileName) ;
    printf ("szExt      = %s\n\n", szExt) ;

    return 0;
}

argv[0]实际上是您在cmd窗口中键入的用于调用程序的命令的名称。因此,如果您输入dircut,则argv[0]dircut,如果您输入dircut.exe,则argv[0]dircut.exe,如果您输入c:\xxx\dircut },argv[0]c:\xxx\dircut,依此类推。

试验:

S:\>s:\dircut\debug\dircut.exe
argv[0]    = s:\dircut\debug\dircut.exe

szDrive    = s:
szDir      = \dircut\debug\
szFileName = dircut
szExt      = .exe


S:\>s:\dircut\debug\dircut
argv[0]    = s:\dircut\debug\dircut

szDrive    = s:
szDir      = \dircut\debug\
szFileName = dircut
szExt      =


S:\>cd dircut\debug

S:\dircut\Debug>dircut.exe
argv[0]    = dircut.exe

szDrive    =
szDir      =
szFileName = dircut
szExt      = .exe