怎么获得文件的扩展名???????????

时间:2022-11-05 05:16:52
我在win2k下,通过鼠标的点击,可以获得资源管理器中的一个项的显示名字(用鼠标hook),但在2000下显示的名字没有扩展名,我怎么才能获得文件的扩展名。修改文件夹选项的做法也行,但我不知道怎么编程实现。大家帮忙。

21 个解决方案

#1


应该有查找某个目录下文件的函数吧?文件名放在字符串中,然后查找"."的位置,获得该位置后字符的名字不就可以了?

#2


第一,我只知道文件的显示名字,也就是说你看到什么,你就得到什么,看不到扩展名,就得不到扩展名。第二,我要是知道了文件的全名,就不在这里问了。第三,现在只能得到文件的显示名字,也就是'.'以前的字串。有没有什么函数可以得到文件的扩展名,我不能得到路径。

#3


工具-〉文件夹选项->使用windows传统风格的文件夹

#4


用打开文件对话框的,这个函数
CFileDialog::GetFileExt()

#5


如果你用LB_DIR应该是有扩展名的

#6


大家帮忙啊

#7


CString sExt;
sFileName=文件名
int id=sFileName.ReverseFind('.');
if(id!=-1)
    sExt=sFileName.Mid(id+1);

#8


HRESULT GetFileName(
  WCHAR wszFileName[],
  DWORD dwSize,
  DWORD* pdwLength
);

#9


用zswzwy的, 或者如下方法也可CFile::GetFileName() CFile::GetFileTitle()
各得到一字符串, 前者减后者(前面是文件名, 含扩展名, 后者不含扩展名)

#10


看来我说的还不够清楚啊,用zswzwy的方法为例。
CString sExt;
sFileName=文件名
int id=sFileName.ReverseFind('.');
if(id!=-1)
    sExt=sFileName.Mid(id+1);
//sFileName=文件名,这一句中,用我的方法的话’文件名‘里包含的只是显示的名字,比如文件(实际)readme.txt,我只能得到显示名字readme。这样的话是不能通过查找'.'来获得文件的扩展名的。我要的是怎么得到扩展名,而不是怎么解析出扩展名。不过还是要谢谢你们的热心帮助!!!

#11


你可以得到完整的文件名呀,这个也不难吧。

#12


如果不用完整文件名,根本不可能获得文件的扩展名!

#13


我需要的功能是:在2k下,在资源管理器中点击一个图标(文件)时,得到他的完整的文件名,好象也不太容易,因为不知道文件的路径。用ListView_GetItemText函数只能得到文件的显示名字,如果系统的文件夹选项设置为不显示文件的扩展名,用上面的函数就得不到扩展名,我不知道还有什么其他的好方法了。骑士兄有什么好方法可以大家研究一下

#14


TCHAR m_dPath[_MAX_PATH];
TCHAR m_dname[_MAX_PATH];
TCHAR m_dext[_MAX_PATH];
sprintf(m_dPath,(LPCSTR)m_fPath);
::_splitpath(m_dPath,NULL,NULL,m_dname,m_dext);
m_dext里面就是了。

#15


我做过一个资源管理器,我是这样做的:

当点开树的时候开始查找它对应的目录,及它下面的目录和文件。

不知道你可不可以也查找一下呢?

#16


我试试howtotell(touch)兄的程序。

#17


howtotell(touch)兄,我怎么才能知道当前的路径呢,我用的是全局的鼠标钩子,当在资源管理器中点击的时候,不知道怎么确定当前的路径,好象挺困难的。因为我在别人的进程里(如资源管理器)是不可能知道当前的路径的,在2k下,地址栏里显示的也不是当前的路径。

#18


GetModuleFile

#19


怎么得到资源管理器当前浏览的文件夹的路径呢,GetModuleFile好象不对吧

#20


CFileFind finder;
CString FileName;      //文件名
CString FileNameEx;    //文件名+扩展名

BOOL conSerach=finder.FindFile("FileName.*");

while(conSerach)
{
conSerach=finder.FindNextFile();
FileNameEx=finder.GetFileName();
}

#21


我已经解决了

#1


应该有查找某个目录下文件的函数吧?文件名放在字符串中,然后查找"."的位置,获得该位置后字符的名字不就可以了?

#2


第一,我只知道文件的显示名字,也就是说你看到什么,你就得到什么,看不到扩展名,就得不到扩展名。第二,我要是知道了文件的全名,就不在这里问了。第三,现在只能得到文件的显示名字,也就是'.'以前的字串。有没有什么函数可以得到文件的扩展名,我不能得到路径。

#3


工具-〉文件夹选项->使用windows传统风格的文件夹

#4


用打开文件对话框的,这个函数
CFileDialog::GetFileExt()

#5


如果你用LB_DIR应该是有扩展名的

#6


大家帮忙啊

#7


CString sExt;
sFileName=文件名
int id=sFileName.ReverseFind('.');
if(id!=-1)
    sExt=sFileName.Mid(id+1);

#8


HRESULT GetFileName(
  WCHAR wszFileName[],
  DWORD dwSize,
  DWORD* pdwLength
);

#9


用zswzwy的, 或者如下方法也可CFile::GetFileName() CFile::GetFileTitle()
各得到一字符串, 前者减后者(前面是文件名, 含扩展名, 后者不含扩展名)

#10


看来我说的还不够清楚啊,用zswzwy的方法为例。
CString sExt;
sFileName=文件名
int id=sFileName.ReverseFind('.');
if(id!=-1)
    sExt=sFileName.Mid(id+1);
//sFileName=文件名,这一句中,用我的方法的话’文件名‘里包含的只是显示的名字,比如文件(实际)readme.txt,我只能得到显示名字readme。这样的话是不能通过查找'.'来获得文件的扩展名的。我要的是怎么得到扩展名,而不是怎么解析出扩展名。不过还是要谢谢你们的热心帮助!!!

#11


你可以得到完整的文件名呀,这个也不难吧。

#12


如果不用完整文件名,根本不可能获得文件的扩展名!

#13


我需要的功能是:在2k下,在资源管理器中点击一个图标(文件)时,得到他的完整的文件名,好象也不太容易,因为不知道文件的路径。用ListView_GetItemText函数只能得到文件的显示名字,如果系统的文件夹选项设置为不显示文件的扩展名,用上面的函数就得不到扩展名,我不知道还有什么其他的好方法了。骑士兄有什么好方法可以大家研究一下

#14


TCHAR m_dPath[_MAX_PATH];
TCHAR m_dname[_MAX_PATH];
TCHAR m_dext[_MAX_PATH];
sprintf(m_dPath,(LPCSTR)m_fPath);
::_splitpath(m_dPath,NULL,NULL,m_dname,m_dext);
m_dext里面就是了。

#15


我做过一个资源管理器,我是这样做的:

当点开树的时候开始查找它对应的目录,及它下面的目录和文件。

不知道你可不可以也查找一下呢?

#16


我试试howtotell(touch)兄的程序。

#17


howtotell(touch)兄,我怎么才能知道当前的路径呢,我用的是全局的鼠标钩子,当在资源管理器中点击的时候,不知道怎么确定当前的路径,好象挺困难的。因为我在别人的进程里(如资源管理器)是不可能知道当前的路径的,在2k下,地址栏里显示的也不是当前的路径。

#18


GetModuleFile

#19


怎么得到资源管理器当前浏览的文件夹的路径呢,GetModuleFile好象不对吧

#20


CFileFind finder;
CString FileName;      //文件名
CString FileNameEx;    //文件名+扩展名

BOOL conSerach=finder.FindFile("FileName.*");

while(conSerach)
{
conSerach=finder.FindNextFile();
FileNameEx=finder.GetFileName();
}

#21


我已经解决了