user-0 提问:  求助：文件夹怎么压缩成二进制文件让c语言能够访问到？谢谢大家了

回复:
user: user-1
content: 引用 楼主 z616913706 的回复:领导给我了酷派刷机文件，这个文件包括 他说是这些文价太杂了，客户看见不好。让我把它压缩起来，然后又c语言访问这个压缩包，说什么里面加入版本号之类的(c语言能访问压缩包？我去问他，他说你把这个压缩包变成二进制文件不就能访问了吗？)让后调用里面的bat文件开始刷机。这个怎么弄各位大神们？  libz

user: user-2
content: 才几百K，压缩个鸡巴 直接链接成一个数据文件 运行的时候先还原到临时目录 在调用

user: user-3
content: WinExec The WinExec function runs the specified application.   This function is provided for compatibility with 16-bit Windows. Win32-based applications should use the CreateProcess function.   UINT WinExec(   LPCSTR lpCmdLine,  // address of command line   UINT uCmdShow      // window style for new application );   Parameters lpCmdLine  Pointer to a null-terminated character string that contains the command line (filename plus optional parameters) for the application to be executed. If the name of the executable file in the lpCmdLine parameter does not contain a directory path, the system searches for the executable file in this sequence:  The directory from which the application loaded.  The current directory.  The Windows system directory. TheGetSystemDirectory function retrieves the path of this directory.  The Windows directory. TheGetWindowsDirectory function retrieves the path of this directory.  The directories listed in the PATH environment variable.  uCmdShow  Specifies how a Windows-based application window is to be shown and is used to supply the wShowWindow member of the STARTUPINFO parameter to the CreateProcess function. For a list of the acceptable values, see the description of the nCmdShow parameter of theShowWindow function. For a non-Windows – based application, the PIF file, if any, for the application determines the window state.  Return Values If the function succeeds, the return value is greater than 31.  If the function fails, the return value is one of the following error values:   Value Meaning  0 The system is out of memory or resources.  ERROR_BAD_FORMAT The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).  ERROR_FILE_NOT_FOUND The specified file was not found.  ERROR_PATH_NOT_FOUND The specified path was not found.    Remarks In Win32, the WinExec function returns when the started process calls the GetMessage function or a time-out limit is reached. To avoid waiting for the time out delay, call the GetMessage function as soon as possible in any process started by a call to WinExec.   See Also Processes and Threads Overview, Process and Thread Functions, CreateProcess,GetMessage,GetSystemDirectory,GetWindowsDirectory, LoadModule,ShowWindow

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:为什么不 WinExec("\"C:\\Program Files\\WinRAR\\rar.exe\" e myrar.rar mydir\\myfile.txt",SW_HIDE); 呢？这位大哥你这个是哪个函数啊？是用的c语言吗？

user: user-3
content: 为什么不 WinExec("\"C:\\Program Files\\WinRAR\\rar.exe\" e myrar.rar mydir\\myfile.txt",SW_HIDE); 呢？

user: user-4
content: 引用 6 楼 z616913706 的回复:引用 4 楼 starytx 的回复:用程序解压压缩包，然后访问解压文件夹里边的文件？可以使用winrar等压缩库这位大哥，麻烦能说的详细些吗？谢谢了用命令行方式来运行winrar的压缩包程序，需要带一些参数，这个参数具体可以参考winrar的帮助文档。代码示例，仅供参考 		STARTUPINFO si; 		PROCESS_INFORMATION pi;  		ZeroMemory(&si ,sizeof(si)); 		si.cb = sizeof(si); 		// 隐藏窗体 		si.wShowWindow = SW_HIDE; 		si.dwFlags = STARTF_USESHOWWINDOW; 		ZeroMemory(&pi ,sizeof(pi)); 		CString strcmdline; 		strcmdline=("d://winrar//winrar.exe" x -ep -inul -ibck -y -o+ -nd:\\test.rar  \"d:\\test1\" \"d:\\test2\"" );  		BOOL bFind = FALSE; 		// Start the child process.  		if( !CreateProcess( NULL, // No module name (use command line).  			strcmdline.GetBuffer(0),         // Command line.  			NULL,             // Process handle not inheritable.  			NULL,             // Thread handle not inheritable.  			FALSE,            // Set handle inheritance to FALSE.  			0,                // No creation flags.  			NULL,             // Use parent's environment block.  			NULL,             // Use parent's starting directory.  			&si,              // Pointer to STARTUPINFO structure. 			&pi )             // Pointer to PROCESS_INFORMATION structure. 			)  		{ 			return ; 		} 		// Wait until child process exits. 		WaitForSingleObject( pi.hProcess, INFINITE );  		// Close process and thread handles.  		CloseHandle( pi.hProcess ); 		CloseHandle( pi.hThread );

user: user-0
content: 引用 4 楼 starytx 的回复:用程序解压压缩包，然后访问解压文件夹里边的文件？可以使用winrar等压缩库这位大哥，麻烦能说的详细些吗？谢谢了

user: user-0
content: 引用 3 楼 xiaohuh421 的回复:zip是标准的开源的算法, 网上有源码可下载. 安装时只需要解压到临时目录, 并运行那个bat文件即可.这位大哥，麻烦你能说的清楚一点吗？谢谢

user: user-4
content: 用程序解压压缩包，然后访问解压文件夹里边的文件？可以使用winrar等压缩库

user: user-5
content: zip是标准的开源的算法, 网上有源码可下载. 安装时只需要解压到临时目录, 并运行那个bat文件即可.

user: user-6
content: 引用 楼主 z616913706 的回复:领导给我了酷派刷机文件，这个文件包括 他说是这些文价太杂了，客户看见不好。让我把它压缩起来，然后又c语言访问这个压缩包，说什么里面加入版本号之类的(c语言能访问压缩包？我去问他，他说你把这个压缩包变成二进制文件不就能访问了吗？)让后调用里面的bat文件开始刷机。这个怎么弄各位大神们？ 可以使用zlib。  个人建议，仅供参考。

user: user-5
content: 1. 在网上找一个c语言实现的zip库源码. 2. 使用库提供的接口函数对你的文件进行压缩. 3.在使用的时候, 使用库中的解压接口函数对你打包的程序进行解压到临时目录. 4. 运行bat. 过程比较简单,  关键是找到一个zip库.  如果不管文件大小. 可以直接以二进制方式把全部文件的内容连接在一起, 形成你自己的数据文件.  需要运行的时候, 再把这个二进制文件按生成的逆过程, 变成一个一个文件.  //打开一个保存数据的文件 FILE *save = fopen("mydata.dat","wb");  //打开adb.exe文件 FILE *open = fopen("adb.exe", "rb"); fread(buf, 1,size, open); //读取adb.exe的文件内容 fwrite(buf, 1, size, save);//写到mydata.dat中. fclose(open);//关闭adb.exe这个文件  open=fopen("boot.img", "rb"); //打开boot.img文件 fread(buf, 1,size, open); //读取boot.img文件的内容到缓冲区 fwrite(buf, 1, size, save); //写入到mydata.dat中:  注意: 这里写入会写到文件后面, 即前面是adb.exe的内容, 现在又在后面写入了                //                                            boot.img的内容 fclose(open); ............ //到这里, mydata.dat文件中已经存放了adb.exe的内容和boot.img的内容. 即实现了把两个文件合成一个文件了. 当然, 上面只是伪代码, 为了方便还原成两个文件, 需要记录每个文件的大小, 也写入到mydata.dat文件中. 如果有目录结构, 还需要保存文件的目录结构.     引用 6 楼 z616913706 的回复:这位大哥，麻烦能说的详细些吗？谢谢了

user: user-0
content: 引用 7 楼 starytx 的回复:引用 6 楼 z616913706 的回复:[quote=引用 4 楼 starytx 的回复:] 用程序解压压缩包，然后访问解压文件夹里边的文件？可以使用winrar等压缩库这位大哥，麻烦能说的详细些吗？谢谢了用命令行方式来运行winrar的压缩包程序，需要带一些参数，这个参数具体可以参考winrar的帮助文档。代码示例，仅供参考 		STARTUPINFO si; 		PROCESS_INFORMATION pi;  		ZeroMemory(&si ,sizeof(si)); 		si.cb = sizeof(si); 		// 隐藏窗体 		si.wShowWindow = SW_HIDE; 		si.dwFlags = STARTF_USESHOWWINDOW; 		ZeroMemory(&pi ,sizeof(pi)); 		CString strcmdline; 		strcmdline=("d://winrar//winrar.exe" x -ep -inul -ibck -y -o+ -nd:\\test.rar  \"d:\\test1\" \"d:\\test2\"" );  		BOOL bFind = FALSE; 		// Start the child process.  		if( !CreateProcess( NULL, // No module name (use command line).  			strcmdline.GetBuffer(0),         // Command line.  			NULL,             // Process handle not inheritable.  			NULL,             // Thread handle not inheritable.  			FALSE,            // Set handle inheritance to FALSE.  			0,                // No creation flags.  			NULL,             // Use parent's environment block.  			NULL,             // Use parent's starting directory.  			&si,              // Pointer to STARTUPINFO structure. 			&pi )             // Pointer to PROCESS_INFORMATION structure. 			)  		{ 			return ; 		} 		// Wait until child process exits. 		WaitForSingleObject( pi.hProcess, INFINITE );  		// Close process and thread handles.  		CloseHandle( pi.hProcess ); 		CloseHandle( pi.hThread );[/quote]这个好像不符合要求啊！版主，有没有你楼生的那种方法了，谢谢您啊

user: user-0
content: 引用 11 楼 gz_qmc 的回复:才几百K，压缩个鸡巴 直接链接成一个数据文件 运行的时候先还原到临时目录 在调用请问大哥，这个怎么链接？

user: user-7
content: 看看zip源码啥的吧