本文目录一览:
- 1、用C语言读取一个文件中的内容,如何对不同的行进行解析,比如是配置文件?
- 2、C语言如何调用系统的文件浏览功能?
- 3、c语言怎么打开一个文件夹,求完整程序
- 4、C语言源程序文件的后缀是什么?
- 5、请教各位大虾,用c语言或者c++怎么编写一个文件浏览器。。
用C语言读取一个文件中的内容,如何对不同的行进行解析,比如是配置文件?
很简单的
配置文件 微软有抓们的一套解析函数
INI文件是Windows系统中一类比较重要的文件,通常用来存放系统或者应用程序的配置信息,以方便系统或者应用 程序在初始化时再次读入。比如Windows系统中的配置文件win.ini和system.ini,它们就主要存放系统启动或用户登陆时的系统信息。这 项功能在方便了系统配置的同时,也为非法程序的自动运行提供了可乘之机。显然,这类文件的重要性应该引起我们的重视。但是对于这样的ini文件的读写操作 却与普通文本文件有着种种的不同,尤其体现在编程实现上。笔者曾经尝试用手动更改的方法在文件中加入一些项,使得自己的程序能够在初始化时自动运行,但是 却没有成功,最后还是藉由编程的方法来实现了。这里主要涉及到一些API函数,而这些函数又往往不被人们所熟知,本文的任务就是在介绍这些函数的同时,用 简单的程序作了示例,下面我们言归正传。
先来看几个往配置文件中写入信息的函数:
(1)WritePrivateProfileSection()用来在ini文件中直接向指定区域写入键和值的信息,其原型如下:
BOOL WritePrivateProfileSection(
LPCTSTR lpAppName, // 指向指定字段的字符串
LPCTSTR lpString, // 指向要写入的键与值字符串
LPCTSTR lpFileName // 指向文件名称字符串,如果不包含完整路径,则在windows目录下创建
);
用法示例:
WritePrivateProfileSection(_T(“windows”),_T(“load=c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));
(2)WritePrivateProfileString()与上一个函数的不同点在于其将键和值分开了,原型如下:
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // 指向指定字段的字符串
LPCTSTR lpKeyName, // 指向指定键的字符串
LPCTSTR lpString, // 指向指定值的字符串
LPCTSTR lpFileName // 指向文件名称字符串
);
用法示例:
WritePrivateProfileString(_T(“windows”),_T(load”)_T(“c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));
(3)WritePrivateProfileStruct()与前面两个的不同在于文件尾有校验和,原型如下:
BOOL WritePrivateProfileStruct(
LPCTSTR lpszSection, //指向指定字段的字符串
LPCTSTR lpszKey, //指向指定键的字符串
LPVOID lpStruct, //指向存放要加入的数据的缓冲区,如果为NULL,则删除键
UINT uSizeStruct, //缓冲区大小,以字节为单位
LPCTSTR szFile //以零结尾的文件名称字符串,如果为空,则向win.ini写入
);
用法示例:
WritePrivateProfileStruct(_T(“windows”),_T(“load”),pBuffer,sizeof(pBuffer),_T(“c:\\winnt\\win.ini”));
(4)还有两个函数,是专门用来向win.ini文件写入的,函数原型如下:
BOOL WriteProfileSection(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpString //指向指定值的字符串
);
BOOL WriteProfileString(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向指定键的字符串
LPCTSTR lpString //指向指定值的字符串
);
下面来看几个对应的从ini文件获取信息的API函数,上面已经说得很详细了,这里只说其中两个:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向键的字符串
LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量
LPTSTR lpReturnedString, //存放INI文件中值的目的缓存区
DWORD nSize, //目的缓冲区的大小,以字节为单位
LPCTSTR lpFileName //指向INI文件名称的字符串
);
UINT GetPrivateProfileInt(
LPCTSTR lpAppName, //指向指定字段的字符串
LPCTSTR lpKeyName, //指向键的字符串
INT nDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量
LPCTSTR lpFileName //指向INI文件名称的字符串
);
程序示例1: 我们在这里建立了一个应用程序“App Name”,并且使用了一个INI文件“appname.ini”,在此INI文件中,我们写入如下内容:
[Section1]
FirstKey = It all worked out okay.
SecondKey = By golly, it works.
ThirdKey = Another test.
代码分析如下:
#include stdio.h
#include windows.h
//主函数
main()
{
//定义局部
CHAR inBuf[80];
HKEY hKey1, hKey2;
DWORD dwDisposition;
LONG lRetCode;
// 试图创建INI文件的键值
lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows NT
\\CurrentVersion\\IniFileMapping\\appname.ini",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
NULL, hKey1,
dwDisposition);
//判断是否出错
if (lRetCode != ERROR_SUCCESS){
printf ("Error in creating appname.ini key\n");
return (0) ;
}
//试图设置一个节区的值
lRetCode = RegSetValueEx ( hKey1,
"Section1",
0,
REG_SZ,
"USR:App Name\\Section1",
20);
//判断是否出错
if (lRetCode != ERROR_SUCCESS) {
printf ( "Error in setting Section1 value\n");
return (0) ;
}
//试图创建一个应用名称键值
lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER,
"App Name",
0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
NULL, hKey2,
dwDisposition);
//判断是否出错
if (lRetCode != ERROR_SUCCESS) {
printf ("Error in creating App Name key\n");
return (0) ;
}
//强制系统重新读取映射区的内容到共享内存中,以便于将来对应用程序的调用可//以找到它,而不需要重新启动系统
WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" );
//向INI文件中添加一些键值
WritePrivateProfileString ("Section1", "FirstKey",
"It all worked out okay.", "appname.ini");
WritePrivateProfileString ("Section1", "SecondKey",
"By golly, it works.", "appname.ini");
WritePrivateProfileSection ("Section1", "ThirdKey = Another Test.",
"appname.ini");
//测试一下添加的正确性
GetPrivateProfileString ("Section1", "FirstKey",
"Bogus Value: Get didn't work", inBuf, 80,
"appname.ini");
printf ("%s", inBuf);
return(0);
}
程序示例2:通过修改win.ini中的字段[windows]中的键load或run,或者是为system.ini中的字段[boot]中的键 shell增加值,可以达到设置程序自动运行的目的。假设我们要自动运行notepad.exe,修改后的win.ini或system.ini文件象这 样就可以:
win.ini
[windows]
load=c:\winnt\notepad.exe
run=c:\winnt\notepad.exe
system.ini
[boot]
shell=c:\winnt\explorer.exe c:\winnt\notepad.exe
注意:system.ini文件的修改要特别注意,如果你单纯改成shell=c:\winnt\notepad.exe,则不能首先运行 explorer.exe,很明显你将看不到桌面和任务栏,呵呵,笔者在做实验时就曾因为粗心造成了这样的后果,不过不用害怕,只要你用我们下面提供的程 序,将它修改过来就可以了,默认时,系统在system.ini中的[boot]下是shell=c:\winnt\explorer.exe。很多非法 程序就是通过修改这两个文件来达到自启动的目的的。
下面这个程序可以在附书光盘中找到,名称为“AutoPlay”,使用VC++6.0写成,核心程序源代码如下:
void CAutoRunDlg::OnBrowse()
{
//只浏览exe文件
CfileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//显示打开文件的对话框
//当操作者选择OK时,程序取得选择文件的全路径名(包括文件的路径及文件名称),并将相应的数值传输给相关的控件变量。
if(fileDlg.DoModal()==IDOK)
{
m_strFileName=fileDlg.GetPathName();
//向将变量中的数值传输给控件显示出来。
UpdateData(FALSE);
}
}
void CAutoRunDlg::OnApply()
{
//更新数据
UpdateData(TRUE);
//写入ini文件
LPCTSTR filename;
filename=m_strFileName;
WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));
}
您如果要更改system.ini,可以将WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));
改为 WritePrivateProfileString(_T("boot"),_T("shell"),filename,_T("c:\\winnt \\system.ini"));并且在输入文件名时输入c:\winnt\explorer.exe c:\winnt\notepad.exe。
写到这里,本文的意图基本达到,如果您可以把某些代码亲自实现,相信读者会有比较大的收获。
C语言如何调用系统的文件浏览功能?
加上头文件#include commdlg.h
其格式如下
OPENFILENAME ofn;
char path[MAX_PATH];
static TCHAR szFilter[] = TEXT ("Text Files (*.TXT)\0*.txt\0") \
TEXT ("ASCII Files (*.ASC)\0*.asc\0") \
TEXT ("All Files (*.*)\0*.*\0\0") ;
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.nMaxFile = MAX_PATH ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ; // Set in Open and Close functions
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = TEXT ("txt") ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
ofn.hwndOwner = hwnd ;
ofn.lpstrFile = path ;
ofn.lpstrFileTitle = NULL ;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
GetOpenFileName (ofn) ;//打开文件对话框
GetSaveFileName(ofn);//保存文件对话框
c语言怎么打开一个文件夹,求完整程序
如果是源文件的话,单击右键,找到并打开“属性”,属性的“常规”里面有打开方式,你单击“打开方式”后面的“更改”,然后再“推荐程序"与"其他程序里"找,如果没有,那么点击下面的“浏览”,这一步是要找到你安装turbo CC++的目录下你turbo cC++这个应用程序的图标,这图标一般跟你安装后出现在桌面的图标相似。(如果你是默认安装的,那么你一般可以去c盘,program files文件夹,然后可能会看到名字含有turbo 单词的文件夹,在里面也许你可以直接看到那个应用程序图标,也许不能,不能的话,那就在里面有个bin文件夹的,bin就是二进制的意思,bin文件夹里一般含有这个应用程序的图标。你选中后摁下面的“打开”就行了。
你是初中生吗,怎么还用turbo c呢,是用的谭浩强的教材吧,他的教材其实里面有些源程序错误挺多的。
C语言源程序文件的后缀是什么?
.APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。资源辅助文件。 \x0d\x0a\x0d\x0a.BMP:位图资源文件。 \x0d\x0a\x0d\x0a.BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。用于浏览项目信息的,如果用source brower的话就必须有这个文件。可以在project options里去掉Generate Browse Info File,这样可以加快编译进度。 \x0d\x0a\x0d\x0a.C:用C语言编写的源代码文件。 \x0d\x0a\x0d\x0a.CLW:ClassWizard生成的用来存放类信息的文件。classwizard信息文件,ini文件的格式。 \x0d\x0a\x0d\x0a.CNT:用来定义帮助文件中“Contents”的结构。 \x0d\x0a\x0d\x0a.CPP或.CXX:用C++语言编写的源代码文件。 \x0d\x0a\x0d\x0a.CUR:光标资源文件。 \x0d\x0a\x0d\x0a.DEF:模块定义文件,供生成动态链接库时使用。 \x0d\x0a\x0d\x0a.DLG:定义对话框资源的独立文件。这种文件对于VC工程来说并非必需,因为VC一般把对话框资源放在.RC资源定义文件中。 \x0d\x0a\x0d\x0a.DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。项目文件,文本格式。 \x0d\x0a\x0d\x0a.DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。工作区文件,与.dsp差不多。 \x0d\x0a\x0d\x0a.EXP:由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。只有在编译DLL时才会生成,记录了DLL文件中的一些信息。 \x0d\x0a\x0d\x0a.H、.HPP或.HXX:用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。 \x0d\x0a\x0d\x0a.HLP:Windows帮助文件。 \x0d\x0a\x0d\x0a.HM:在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。 \x0d\x0a\x0d\x0a.HPJ:由Help Workshop生成的Help工程文件,用来控制Help文件的生成过程。 \x0d\x0a\x0d\x0a.HPG,生成帮助的文件的工程。 \x0d\x0a\x0d\x0a.ICO:图标资源文件。 \x0d\x0a\x0d\x0a.ILK:连接过程中生成的一种中间文件,只供LINK工具使用。 \x0d\x0a\x0d\x0a.INI:配置文件。 \x0d\x0a\x0d\x0a.LIB:库文件,LINK工具将使用它来连接各种输入库,以便最终生成EXE文件。 \x0d\x0a\x0d\x0a.LIC:用户许可证书文件,使用某些ActiveX控件时需要该文件。 \x0d\x0a\x0d\x0a.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理。 \x0d\x0a\x0d\x0a.MAP:由LINK工具生成的一种文本文件,其中包含有被连接的程序的某些信息,例如程序中的组信息和公共符 \x0d\x0a\x0d\x0a号信息等。执行文件的映像信息记录文件。 \x0d\x0a\x0d\x0a.MDP:旧版本的项目文件,相当于.dsp \x0d\x0a\x0d\x0a.NCB:NCB是“No Compile Browser”的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。 \x0d\x0a\x0d\x0a.OBJ:由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。 \x0d\x0a\x0d\x0a.ODL:用对象描述语言编写的源代码文件,VC用它来生成TLB文件。 \x0d\x0a\x0d\x0a.OLB:带有类型库资源的一种特殊的动态链接库,也叫对象库文件。 \x0d\x0a\x0d\x0a.OPT:VC开发环境自动生成的用来存放WorkSpace中各种选项的文件。工程关于开发环境的参数文件。如工具条位置信息等。 \x0d\x0a\x0d\x0a.PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成并使用的三种文件。 \x0d\x0a\x0d\x0a.PCH:预编译头文件,比较大,由编译器在建立工程时自动生成,其中存放有工程中已经编译的部分代码,在以后建立工程时不再重新编译这些代码,以便加快整个编译过程的速度。 \x0d\x0a\x0d\x0a.PDB:程序数据库文件,在建立工程时自动生成,其中存放程序的各种信息,用来加快调试过程的速度。记录了程序有关的一些数据和调试信息。 \x0d\x0a\x0d\x0a.PLG:编译信息文件,编译时的error和warning信息文件。 \x0d\x0a\x0d\x0a.RC:资源定义文件。 \x0d\x0a\x0d\x0a.RC2:资源定义文件,供一些特殊情况下使用。 \x0d\x0a\x0d\x0a.REG:注册表信息文件。 \x0d\x0a\x0d\x0a.RES:二进制资源文件,资源编译器编译资源定义文件后即生成RES文件。 \x0d\x0a\x0d\x0a.RTF:Rich Text Format(丰富文本格式)文档,可由Word或写字板来创建,常被用来生成Help文件。 \x0d\x0a\x0d\x0a.SBR:VC编译器为每个OBJ文件生成的原始浏览信息文件,浏览信息维护工具(BSCMAKE)将利用SBR文件来生成BSC文件。 \x0d\x0a\x0d\x0a.TLB:OLE库文件,其中存放了OLE自动化对象的数据类型、模块和接口定义,自动化服务器通过TLB文件就能了解自动化对象的使用方法。 \x0d\x0a\x0d\x0a.WAV:声音资源文件。
请教各位大虾,用c语言或者c++怎么编写一个文件浏览器。。
char s[256]= "C:\\";
用FindFirstFile()FindNextFile();打开该文件夹下所有目录