#include <iostream>
#include <string>
#include "stdlib.h"
#include "direct.h"
#include "io.h"
#include "stdio.h"
#include "wchar.h"
#include <Windows.h>
#include <atlstr.h>
#include <fstream>
#pragma warning(disable:4996)
using namespace std;
int main() {
long length = 0;
TCHAR* buffer = NULL;
CString s_path = _T("D:\\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpath\\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongp t.txt");
//LPWSTR lpwszFileName = (wchar_t*)s_path.c_str();
// First obtain the size needed by passing NULL and 0.
length = GetShortPathName(s_path, NULL, 0);
if (length == 0)
cout << "ERROR! GetShortPathName: " << length << endl;
buffer = new TCHAR[MAX_PATH];
memset(buffer, 0, MAX_PATH);
length = GetShortPathName(s_path, buffer, MAX_PATH);
if (length == 0)
cout << "ERROR! GetShortPathName: " << length << endl;
ifstream myfile(buffer);
string buf;
while(getline(myfile,buf))
{
cout << buf << endl;
}
myfile.close();
_tprintf(TEXT("long name = %s \nshortname = %s \n"), s_path, buffer);
delete[] buffer;
cout<< length <<endl;
}
C++在win7下读长路径和长文件名文件。
核心原理:
把长路径和长文件名转换用GetShortPathName函数为短的buffer数值,然后再去读取该文件
测试的txt文件:
自己可在D盘建立一个名称为:
VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpath
的文件夹;
然后再建立一个名称为:
VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpat
的txt文件,然后在这个文件里面随便写点内容,进行测试。
D:\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpath\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpat.txt
------------------
建立第2个txt文件,文件名为:
VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongp t.txt
下面这个文件名有空格,倒数第2个字符处(见: gp t.txt)。
D:\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpath\VerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongpathVerylongp t.txt
编译器版本:VS2019
2020年8月20日