打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
长短路径转换
用过 GetLongPathName API函数的人都知道,它是一个Platform SDK中用于文件I/O的一个函数,但是它只能在Windows 98 和 Windows 2000 中使用。本文提供一个MFC 全程仿真函数 GetLongPathNameThis,这个函数可以在所有Win32 OS中使用。

/*

头文件
Module : LONGPATH.H
Purpose: Interface for a function to emulate GetLongPathName on all Win32 OS's
Created: PJN / 16-06-1999
History:

Copyright (c) 1999 by PJ Naughter.  
All rights reserved.

*/

/////////////////////////////////  Defines  //////////////////////////////////
#ifndef __LONGPATH_H__
#define __LONGPATH_H__

////////////////////////////// Functions  ////////////////////////////////////

BOOL GetLongPathName(const CString& sFilename, CString& sLongFilename);

#endif // __LONGPATH_H__

/*

实现文件
Module : LONGPATH.CPP
Purpose: Implementation for a function to emulate GetLongPathName on all Win32 OS's
Created: PJN / 16-06-1999
History:

Copyright (c) 1999 by PJ Naughter.  
All rights reserved.

*/

/////////////////////////////////  Includes  //////////////////////////////////
#include "stdafx.h"
#include "longpath.h"

/////////////////////////////////  Defines ////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////////////////////////////// Implementation /////////////////////////////////

BOOL GetLongPathName(const CString& sFilename, CString& sLongFilename)
{
  //First get the long filename version of the filename  
  WIN32_FIND_DATA fd;
  HANDLE hFind = FindFirstFile(sFilename, &fd);
  if (hFind != INVALID_HANDLE_VALUE)
  {
    FindClose(hFind);
    sLongFilename = fd.cFileName;
  }
  else
    return FALSE;
 
  //Now get the long filename version of each part of the path
  int nSlash = sFilename.ReverseFind(_T('\\'));
  CString sTemp(sFilename);
  while (nSlash != -1)
  {
    sTemp = sTemp.Left(nSlash);

    if (sTemp.GetLength() != 2)
    {
      HANDLE hFind = FindFirstFile(sTemp, &fd);
      if (hFind != INVALID_HANDLE_VALUE)
      {
        FindClose(hFind);
        sLongFilename = CString(fd.cFileName) + _T("\\") + sLongFilename;
      }
      else
      {
        sLongFilename = sTemp + _T("\\") + sLongFilename;
        sTemp.Empty();
      }
    }
    else
    {
      sLongFilename = sTemp + _T("\\") + sLongFilename;
      sTemp.Empty();
    }
     
    nSlash = sTemp.ReverseFind(_T('\\'));
  }

  return TRUE;
}

 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
两种方法使用VC遍历文件夹下所有文件和文件夹
VC文件目录常见操作
判断目录是否存在
[技术应用]基于WINPCAP的GOOSE报文捕获分析工具开发-电气_电气网,电力_供配电...
[转载]VC中判断目录,文件是否存在,创建目录,求目录或
VC++判断文件或文件夹是否存在
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服