File names.dat may be corrupt 如何修复?

部署运行你感兴趣的模型镜像

VSS本来是个好东西,只是对于它的资料比较少,出了问题就难得解决了!

呵呵!

出现这个错误的时候,只要从命令窗口CD到VSS的安装目录下的win32目录中。

运行 "ANALYZE.EXE -X E:/VSS/data" (后面添对应的目录)。

便会找出对应的出错的文件。

再 “ANALYZE -F e:/vss/data” (需要所有的用户都退出VSS后才能执行)。

每次执行一条命令后在data目录下会生成一个"backup/analyze.log"的文件,在下条命令执行前,需要删除这个文件。

=========================================================================

QUOTE:
The VSS Data folder contains the database of all your files and [url=mk:@MSITStore:E:Program%20FilesMicrosoft%20Visual%20StudioVSSSSUSEXP.CHM::/html/ssglossary.htm#project]projects[/url]. Although every precaution has been taken to ensure the integrity of all VSS files, file corruption due to network or operating system problems is possible. The Analyze.exe utility is provided to enable you to search for and fix any corruption or errors.

Note Doing a full backup of your Data folder on a regular basis is highly recommended.
To run Analyze.exe:
Lock out all users and have them quit VSS. See [url=mk:@MSITStore:E:Program%20FilesMicrosoft%20Visual%20StudioVSSSSUSEXP.CHM::/html/lock_a_database.htm]Lock a Database[/url] for more information.
Note VSS users can have files checked out when a database is locked.
Open a command prompt to run Analyze. For example, you might enter C:vsswin32analyze ..data
The program goes through the VSS database, reporting any possible problems. If errors or corrupted files are discovered, you can fix them using the -F, -C, and -D parameters.
We recommend that you run Analyze twice — first with the -F option (to fix any errors found), and the second time to check if any errors remain. If you still have errors after the first run, you can check the Microsoft Knowledge Base article Q152807 for more information.




QUOTE:
Analyze.exe scans a [url=mk:@MSITStore:E:Program%20FilesMicrosoft%20Visual%20StudioVSSSSUSEXP.CHM::/html/ssglossary.htm#vssdatabase]VSS database[/url] for integrity and/or errors, displays them and, if set to do so, fixes them. [url=mk:@MSITStore:E:Program%20FilesMicrosoft%20Visual%20StudioVSSSSUSEXP.CHM::/html/ssglossary.htm#vssadministrator]VSS administrators[/url] should run Analyze.exe every week to verify that there are no problems in the VSS database.
Administrators can use the 32-bit command-line utility to repair version 4.0 VSS databases (and later). For example, a database problem exists when you select a file that you know exists in the VSS database, use a command, such as Get, and receive the error message, "File does not exist."
Administrators can run Analyze.exe manually from the command line, or as part of a script for unattended operation, to analyze or fix the problem. Analyze.exe is in the WIN32 folder under the folder in which you installed VSS.
We recommend that you run Analyze.exe twice — first with the -F option (to fix any errors found), and the second time to check if any errors remain. If you still have errors after the first run, you can check the Microsoft Knowledge Base athttp://www.microsoft.com/kb) article Q152807 for more information.
SyntaxANALYZE [-B<folder>] [-C] [-D] [-F] [-I-] [-V] [-X] [-?] [-H] <Full Database Path | @Response File | List of Files>OptionDescription
-B<folder> Specify a backup folder.
-C Clean up and compress the database. This option can be slow.
-D Delete any unused files.
-F Attempt to repair any inconsistencies and corruption that are detected.
-I- Continue without stopping for user input (allowing unattended operation). By default, Analyze.exe leaves the results window on display.
-Vn Specify the verbosity of output. -V1 displays only critical errors, -V2 displays critical and significant errors, -V3 displays all errors, and -V4 shows all errors and warnings. The -V4 option shows its output in the lower pane of the Analyze Results window and contains detailed information on what the utility attempted and accomplished. The default is -V1. -V (without a number) is equivalent to
-V4.
-X Directs Analyze.exe to not lock files as it processes. Allows Analyze.exe to run against a live database. This option cannot be used with the -c, -d, or -f options and use of this option is not recommended unless absolutely necessary.
Full Database Path Path of the VSS data folder to analyze. This parameter must be the first non-switch parameter. A data path, list of files, or response file must be present on the command line.
@Response File File produced by running Analyze.exe, containing listing of problem files, named Analyze.bad by default. Using this file as input directs Analyze.exe to work on fewer files, thereby improving performance. To do this, the response file must be in the path or in the same folder as Analyze.exe (the Win32 folder).
List of Files List of files to analyze. List can include only log files, or complete data paths, such as C:VSSDataAAAAAAAAA.
-?, -H Displays usage message containing descriptions of valid options.
Order of options is not important, but the full database path, response file, or list of files must be included on the command line as the first non-option item.
Examples
ANALYZE -C -D -F -V4 C:VSSData Analyzes and repairs the complete database and generates verbose output.
ANALYZE -BC:Temp C:VSSData Analyzes the database, but does not fix it. Creates a list of corrupted files in C:Temp.
ANALYZE -F -C -D @C:TempAnalyze.badFixes any problems in the files listed in the Analyze.bad file generated by the preceding example.
Remarks
The types of problems that Analyze.exe can correct include:
Parent/child mismatch. Possible situations include those in which a project thinks it has a file or subproject but the child disagrees, a child thinks it has a parent but the parent disagrees, or child and parent don't reference each other but the child counts are off.
Corrupt database files. These files include the following: Names.dat (stores long file names longer than 34 characters), Rights.dat (stores relationships between users and project rights), Status.dat (stores check out status for files), Um.dat (stores all users in a VSS database), and Version.dat (stores the VSS version).
Removing unused items from the database.
Administrators should run Analyze.exe regularly to verify that no problems exist in their VSS databases. All results of Analyze/Repair are logged to the file, Analyze.log, which is placed in the VSSDataBackup folder and is replaced each time Analyze.exe is run. When you analyze the database, Analyze.exe creates a file listing all corrupted files. This file is called Analyze.bad and is also placed in the VSSDataBackup folder. In addition, the original versions of files that have been repaired are placed in the VSSDataBackup folder.
Under normal conditions, all users should be logged out of VSS before Administrators run Analyze.exe. Users must be logged out to run Analyze.exe with the - F option to repair problems. Analyze.exe does not run if any users are logged into VSS unless the -X option is supplied.
Analyze.exe writes output to the Analyze Results window. This window may contain two panes. You must close any open results windows before running Analyze.exe another time.
The top (or only) pane contains summary information. For example:

Analyze Version 4.00[Build 1110]
Database analysis in progress.
The Parent Project for item acctapp is corrupt and the link to the child file has been lost until the project is recovered.
Analysis complete.

This is the information provided in the output window when you run Analyze.exe using the -V or -V4 option for verbose output. When you use the -V option, the information provided is written to the bottom pane of the Analyze Results window. The following example shows verbose output:

Started analyzing user management system.
Successfully completed analyzing the user management system.
Rebuilding corrupted project for item aaaaaaaa.
Building the project list.
Checking cross-file relationships.
Checking parent/child relationships.
Validating the Security System.
Writing a new copy of 'c:vssdataaaaaaaaaa'.
The count of children of item 'aaaaaaaa', as given in its header, does not match the number of children found on disk. The count will be adjusted.
The count of subprojects of item 'aaaaaaaa', as given in its header, does not match the number of subprojects found on disk. The count will be adjusted.
Note that the actual output in the Analyze Results window does not wrap; it scrolls within the pane.
The Rights.dat file contains the rights and assignments for each user. If that file is rebuilt by Analyze.exe, all information about rights for individual users and projects is lost. When you run VSS again, each user has the read/write or read-only rights for the entire database that were assigned when that user was added to the user list for the database. Use the Rights and Assignments commands to set rights for individual users and projects again or clear the Enable Rights and Assignments commands check box on the Project Rights tab to use the read/write or read-only rights.

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

请封装一个应用层,主要用来压缩和解压文件。要求:适配VS2008,C++风格。解压和压缩方法,只采用文件的方式。引用的两个头文件内容为:“#ifndef _zip_H #define _zip_H // #ifdef ZIP_STD #include <time.h> #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name #ifndef MAX_PATH #define MAX_PATH 1024 #endif typedef unsigned long DWORD; typedef char TCHAR; typedef FILE* HANDLE; typedef time_t FILETIME; #endif // ZIP functions -- for creating zip files // This file is a repackaged form of the Info-Zip source code available // at www.info-zip.org. The original copyright notice may be found in // zip.cpp. The repackaging was done by Lucian Wischik to simplify and // extend its use in Windows/C++. Also to add encryption and unicode. #ifndef _unzip_H DECLARE_HANDLE(HZIP); #endif // An HZIP identifies a zip file that is being created typedef DWORD ZRESULT; // return codes from any of the zip functions. Listed later. HZIP CreateZip(const TCHAR *fn, const char *password); HZIP CreateZip(void *buf,unsigned int len, const char *password); HZIP CreateZipHandle(HANDLE h, const char *password); // CreateZip - call this to start the creation of a zip file. // As the zip is being created, it will be stored somewhere: // to a pipe: CreateZipHandle(hpipe_write); // in a file (by handle): CreateZipHandle(hfile); // in a file (by name): CreateZip("c:\\test.zip"); // in memory: CreateZip(buf, len); // or in pagefile memory: CreateZip(0, len); // The final case stores it in memory backed by the system paging file, // where the zip may not exceed len bytes. This is a bit friendlier than // allocating memory with new[]: it won't lead to fragmentation, and the // memory won't be touched unless needed. That means you can give very // large estimates of the maximum-size without too much worry. // As for the password, it lets you encrypt every file in the archive. // (This api doesn't support per-file encryption.) // Note: because pipes don't allow random access, the structure of a zipfile // created into a pipe is slightly different from that created into a file // or memory. In particular, the compressed-size of the item cannot be // stored in the zipfile until after the item itself. (Also, for an item added // itself via a pipe, the uncompressed-size might not either be known until // after.) This is not normally a problem. But if you try to unzip via a pipe // as well, then the unzipper will not know these things about the item until // after it has been unzipped. Therefore: for unzippers which don't just write // each item to disk or to a pipe, but instead pre-allocate memory space into // which to unzip them, then either you have to create the zip not to a pipe, // or you have to add items not from a pipe, or at least when adding items // from a pipe you have to specify the length. // Note: for windows-ce, you cannot close the handle until after CloseZip. // but for real windows, the zip makes its own copy of your handle, so you // can close yours anytime. ZRESULT ZipAdd(HZIP hz,const TCHAR *dstzn, const TCHAR *fn); ZRESULT ZipAdd(HZIP hz,const TCHAR *dstzn, void *src,unsigned int len); ZRESULT ZipAddHandle(HZIP hz,const TCHAR *dstzn, HANDLE h); ZRESULT ZipAddHandle(HZIP hz,const TCHAR *dstzn, HANDLE h, unsigned int len); ZRESULT ZipAddFolder(HZIP hz,const TCHAR *dstzn); // ZipAdd - call this for each file to be added to the zip. // dstzn is the name that the file will be stored as in the zip file. // The file to be added to the zip can come // from a pipe: ZipAddHandle(hz,"file.dat", hpipe_read); // from a file: ZipAddHandle(hz,"file.dat", hfile); // from a filen: ZipAdd(hz,"file.dat", "c:\\docs\\origfile.dat"); // from memory: ZipAdd(hz,"subdir\\file.dat", buf,len); // (folder): ZipAddFolder(hz,"subdir"); // Note: if adding an item from a pipe, and if also creating the zip file itself // to a pipe, then you might wish to pass a non-zero length to the ZipAddHandle // function. This will let the zipfile store the item's size ahead of the // compressed item itself, which in turn makes it easier when unzipping the // zipfile from a pipe. ZRESULT ZipGetMemory(HZIP hz, void **buf, unsigned long *len); // ZipGetMemory - If the zip was created in memory, via ZipCreate(0,len), // then this function will return information about that memory block. // buf will receive a pointer to its start, and len its length. // Note: you can't add any more after calling this. ZRESULT CloseZip(HZIP hz); // CloseZip - the zip handle must be closed with this function. unsigned int FormatZipMessage(ZRESULT code, TCHAR *buf,unsigned int len); // FormatZipMessage - given an error code, formats it as a string. // It returns the length of the error message. If buf/len points // to a real buffer, then it also writes as much as possible into there. // These are the result codes: #define ZR_OK 0x00000000 // nb. the pseudo-code zr-recent is never returned, #define ZR_RECENT 0x00000001 // but can be passed to FormatZipMessage. // The following come from general system stuff (e.g. files not openable) #define ZR_GENMASK 0x0000FF00 #define ZR_NODUPH 0x00000100 // couldn't duplicate the handle #define ZR_NOFILE 0x00000200 // couldn't create/open the file #define ZR_NOALLOC 0x00000300 // failed to allocate some resource #define ZR_WRITE 0x00000400 // a general error writing to the file #define ZR_NOTFOUND 0x00000500 // couldn't find that file in the zip #define ZR_MORE 0x00000600 // there's still more data to be unzipped #define ZR_CORRUPT 0x00000700 // the zipfile is corrupt or not a zipfile #define ZR_READ 0x00000800 // a general error reading the file // The following come from mistakes on the part of the caller #define ZR_CALLERMASK 0x00FF0000 #define ZR_ARGS 0x00010000 // general mistake with the arguments #define ZR_NOTMMAP 0x00020000 // tried to ZipGetMemory, but that only works on mmap zipfiles, which yours wasn't #define ZR_MEMSIZE 0x00030000 // the memory size is too small #define ZR_FAILED 0x00040000 // the thing was already failed when you called this function #define ZR_ENDED 0x00050000 // the zip creation has already been closed #define ZR_MISSIZE 0x00060000 // the indicated input file size turned out mistaken #define ZR_PARTIALUNZ 0x00070000 // the file had already been partially unzipped #define ZR_ZMODE 0x00080000 // tried to mix creating/opening a zip // The following come from bugs within the zip library itself #define ZR_BUGMASK 0xFF000000 #define ZR_NOTINITED 0x01000000 // initialisation didn't work #define ZR_SEEK 0x02000000 // trying to seek in an unseekable file #define ZR_NOCHANGE 0x04000000 // changed its mind on storage, but not allowed #define ZR_FLATE 0x05000000 // an internal error in the de/inflation code // e.g. // // (1) Traditional use, creating a zipfile from existing files // HZIP hz = CreateZip("c:\\simple1.zip",0); // ZipAdd(hz,"znsimple.bmp", "c:\\simple.bmp"); // ZipAdd(hz,"znsimple.txt", "c:\\simple.txt"); // CloseZip(hz); // // (2) Memory use, creating an auto-allocated mem-based zip file from various sources // HZIP hz = CreateZip(0,100000, 0); // // adding a conventional file... // ZipAdd(hz,"src1.txt", "c:\\src1.txt"); // // adding something from memory... // char buf[1000]; for (int i=0; i<1000; i++) buf[i]=(char)(i&0x7F); // ZipAdd(hz,"file.dat", buf,1000); // // adding something from a pipe... // HANDLE hread,hwrite; CreatePipe(&hread,&hwrite,NULL,0); // HANDLE hthread = CreateThread(0,0,ThreadFunc,(void*)hwrite,0,0); // ZipAdd(hz,"unz3.dat", hread,1000); // the '1000' is optional. // WaitForSingleObject(hthread,INFINITE); // CloseHandle(hthread); CloseHandle(hread); // ... meanwhile DWORD WINAPI ThreadFunc(void *dat) // { HANDLE hwrite = (HANDLE)dat; // char buf[1000]={17}; // DWORD writ; WriteFile(hwrite,buf,1000,&writ,NULL); // CloseHandle(hwrite); // return 0; // } // // and now that the zip is created, let's do something with it: // void *zbuf; unsigned long zlen; ZipGetMemory(hz,&zbuf,&zlen); // HANDLE hfz = CreateFile("test2.zip",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); // DWORD writ; WriteFile(hfz,zbuf,zlen,&writ,NULL); // CloseHandle(hfz); // CloseZip(hz); // // (3) Handle use, for file handles and pipes // HANDLE hzread,hzwrite; CreatePipe(&hzread,&hzwrite,0,0); // HANDLE hthread = CreateThread(0,0,ZipReceiverThread,(void*)hzread,0,0); // HZIP hz = CreateZipHandle(hzwrite,0); // // ... add to it // CloseZip(hz); // CloseHandle(hzwrite); // WaitForSingleObject(hthread,INFINITE); // CloseHandle(hthread); // ... meanwhile DWORD WINAPI ZipReceiverThread(void *dat) // { HANDLE hread = (HANDLE)dat; // char buf[1000]; // while (true) // { DWORD red; ReadFile(hread,buf,1000,&red,NULL); // // ... and do something with this zip data we're receiving // if (red==0) break; // } // CloseHandle(hread); // return 0; // } // Now we indulge in a little skullduggery so that the code works whether // the user has included just zip or both zip and unzip. // Idea: if header files for both zip and unzip are present, then presumably // the cpp files for zip and unzip are both present, so we will call // one or the other of them based on a dynamic choice. If the header file // for only one is present, then we will bind to that particular one. ZRESULT CloseZipZ(HZIP hz); unsigned int FormatZipMessageZ(ZRESULT code, char *buf,unsigned int len); bool IsZipHandleZ(HZIP hz); #ifdef _unzip_H #undef CloseZip #define CloseZip(hz) (IsZipHandleZ(hz)?CloseZipZ(hz):CloseZipU(hz)) #else #define CloseZip CloseZipZ #define FormatZipMessage FormatZipMessageZ #endif #endif ”和“#ifndef _unzip_H #define _unzip_H // #ifdef ZIP_STD #include <time.h> #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name #ifndef MAX_PATH #define MAX_PATH 1024 #endif typedef unsigned long DWORD; typedef char TCHAR; typedef FILE* HANDLE; typedef time_t FILETIME; #endif // UNZIPPING functions -- for unzipping. // This file is a repackaged form of extracts from the zlib code available // at www.gzip.org/zlib, by Jean-Loup Gailly and Mark Adler. The original // copyright notice may be found in unzip.cpp. The repackaging was done // by Lucian Wischik to simplify and extend its use in Windows/C++. Also // encryption and unicode filenames have been added. #ifndef _zip_H DECLARE_HANDLE(HZIP); #endif // An HZIP identifies a zip file that has been opened typedef DWORD ZRESULT; // return codes from any of the zip functions. Listed later. typedef struct { int index; // index of this file within the zip TCHAR name[MAX_PATH]; // filename within the zip DWORD attr; // attributes, as in GetFileAttributes. FILETIME atime,ctime,mtime;// access, create, modify filetimes long comp_size; // sizes of item, compressed and uncompressed. These long unc_size; // may be -1 if not yet known (e.g. being streamed in) } ZIPENTRY; HZIP OpenZip(const TCHAR *fn, const char *password); HZIP OpenZip(void *z,unsigned int len, const char *password); HZIP OpenZipHandle(HANDLE h, const char *password); // OpenZip - opens a zip file and returns a handle with which you can // subsequently examine its contents. You can open a zip file from: // from a pipe: OpenZipHandle(hpipe_read,0); // from a file (by handle): OpenZipHandle(hfile,0); // from a file (by name): OpenZip("c:\\test.zip","password"); // from a memory block: OpenZip(bufstart, buflen,0); // If the file is opened through a pipe, then items may only be // accessed in increasing order, and an item may only be unzipped once, // although GetZipItem can be called immediately before and after unzipping // it. If it's opened in any other way, then full random access is possible. // Note: pipe input is not yet implemented. // Note: zip passwords are ascii, not unicode. // Note: for windows-ce, you cannot close the handle until after CloseZip. // but for real windows, the zip makes its own copy of your handle, so you // can close yours anytime. ZRESULT GetZipItem(HZIP hz, int index, ZIPENTRY *ze); // GetZipItem - call this to get information about an item in the zip. // If index is -1 and the file wasn't opened through a pipe, // then it returns information about the whole zipfile // (and in particular ze.index returns the number of index items). // Note: the item might be a directory (ze.attr & FILE_ATTRIBUTE_DIRECTORY) // See below for notes on what happens when you unzip such an item. // Note: if you are opening the zip through a pipe, then random access // is not possible and GetZipItem(-1) fails and you can't discover the number // of items except by calling GetZipItem on each one of them in turn, // starting at 0, until eventually the call fails. Also, in the event that // you are opening through a pipe and the zip was itself created into a pipe, // then then comp_size and sometimes unc_size as well may not be known until // after the item has been unzipped. ZRESULT FindZipItem(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRY *ze); // FindZipItem - finds an item by name. ic means 'insensitive to case'. // It returns the index of the item, and returns information about it. // If nothing was found, then index is set to -1 and the function returns // an error code. ZRESULT UnzipItem(HZIP hz, int index, const TCHAR *fn); ZRESULT UnzipItem(HZIP hz, int index, void *z,unsigned int len); ZRESULT UnzipItemHandle(HZIP hz, int index, HANDLE h); // UnzipItem - given an index to an item, unzips it. You can unzip to: // to a pipe: UnzipItemHandle(hz,i, hpipe_write); // to a file (by handle): UnzipItemHandle(hz,i, hfile); // to a file (by name): UnzipItem(hz,i, ze.name); // to a memory block: UnzipItem(hz,i, buf,buflen); // In the final case, if the buffer isn't large enough to hold it all, // then the return code indicates that more is yet to come. If it was // large enough, and you want to know precisely how big, GetZipItem. // Note: zip files are normally stored with relative pathnames. If you // unzip with ZIP_FILENAME a relative pathname then the item gets created // relative to the current directory - it first ensures that all necessary // subdirectories have been created. Also, the item may itself be a directory. // If you unzip a directory with ZIP_FILENAME, then the directory gets created. // If you unzip it to a handle or a memory block, then nothing gets created // and it emits 0 bytes. ZRESULT SetUnzipBaseDir(HZIP hz, const TCHAR *dir); // if unzipping to a filename, and it's a relative filename, then it will be relative to here. // (defaults to current-directory). ZRESULT CloseZip(HZIP hz); // CloseZip - the zip handle must be closed with this function. unsigned int FormatZipMessage(ZRESULT code, TCHAR *buf,unsigned int len); // FormatZipMessage - given an error code, formats it as a string. // It returns the length of the error message. If buf/len points // to a real buffer, then it also writes as much as possible into there. // These are the result codes: #define ZR_OK 0x00000000 // nb. the pseudo-code zr-recent is never returned, #define ZR_RECENT 0x00000001 // but can be passed to FormatZipMessage. // The following come from general system stuff (e.g. files not openable) #define ZR_GENMASK 0x0000FF00 #define ZR_NODUPH 0x00000100 // couldn't duplicate the handle #define ZR_NOFILE 0x00000200 // couldn't create/open the file #define ZR_NOALLOC 0x00000300 // failed to allocate some resource #define ZR_WRITE 0x00000400 // a general error writing to the file #define ZR_NOTFOUND 0x00000500 // couldn't find that file in the zip #define ZR_MORE 0x00000600 // there's still more data to be unzipped #define ZR_CORRUPT 0x00000700 // the zipfile is corrupt or not a zipfile #define ZR_READ 0x00000800 // a general error reading the file #define ZR_PASSWORD 0x00001000 // we didn't get the right password to unzip the file // The following come from mistakes on the part of the caller #define ZR_CALLERMASK 0x00FF0000 #define ZR_ARGS 0x00010000 // general mistake with the arguments #define ZR_NOTMMAP 0x00020000 // tried to ZipGetMemory, but that only works on mmap zipfiles, which yours wasn't #define ZR_MEMSIZE 0x00030000 // the memory size is too small #define ZR_FAILED 0x00040000 // the thing was already failed when you called this function #define ZR_ENDED 0x00050000 // the zip creation has already been closed #define ZR_MISSIZE 0x00060000 // the indicated input file size turned out mistaken #define ZR_PARTIALUNZ 0x00070000 // the file had already been partially unzipped #define ZR_ZMODE 0x00080000 // tried to mix creating/opening a zip // The following come from bugs within the zip library itself #define ZR_BUGMASK 0xFF000000 #define ZR_NOTINITED 0x01000000 // initialisation didn't work #define ZR_SEEK 0x02000000 // trying to seek in an unseekable file #define ZR_NOCHANGE 0x04000000 // changed its mind on storage, but not allowed #define ZR_FLATE 0x05000000 // an internal error in the de/inflation code // e.g. // // SetCurrentDirectory("c:\\docs\\stuff"); // HZIP hz = OpenZip("c:\\stuff.zip",0); // ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index; // for (int i=0; i<numitems; i++) // { GetZipItem(hz,i,&ze); // UnzipItem(hz,i,ze.name); // } // CloseZip(hz); // // // HRSRC hrsrc = FindResource(hInstance,MAKEINTRESOURCE(1),RT_RCDATA); // HANDLE hglob = LoadResource(hInstance,hrsrc); // void *zipbuf=LockResource(hglob); // unsigned int ziplen=SizeofResource(hInstance,hrsrc); // HZIP hz = OpenZip(zipbuf, ziplen, 0); // - unzip to a membuffer - // ZIPENTRY ze; int i; FindZipItem(hz,"file.dat",true,&i,&ze); // char *ibuf = new char[ze.unc_size]; // UnzipItem(hz,i, ibuf, ze.unc_size); // delete[] ibuf; // - unzip to a fixed membuff - // ZIPENTRY ze; int i; FindZipItem(hz,"file.dat",true,&i,&ze); // char ibuf[1024]; ZRESULT zr=ZR_MORE; unsigned long totsize=0; // while (zr==ZR_MORE) // { zr = UnzipItem(hz,i, ibuf,1024); // unsigned long bufsize=1024; if (zr==ZR_OK) bufsize=ze.unc_size-totsize; // totsize+=bufsize; // } // - unzip to a pipe - // HANDLE hwrite; HANDLE hthread=CreateWavReaderThread(&hwrite); // int i; ZIPENTRY ze; FindZipItem(hz,"sound.wav",true,&i,&ze); // UnzipItemHandle(hz,i, hwrite); // CloseHandle(hwrite); // WaitForSingleObject(hthread,INFINITE); // CloseHandle(hwrite); CloseHandle(hthread); // - finished - // CloseZip(hz); // // note: no need to free resources obtained through Find/Load/LockResource // // // SetCurrentDirectory("c:\\docs\\pipedzipstuff"); // HANDLE hread,hwrite; CreatePipe(&hread,&hwrite,0,0); // CreateZipWriterThread(hwrite); // HZIP hz = OpenZipHandle(hread,0); // for (int i=0; ; i++) // { ZIPENTRY ze; // ZRESULT zr=GetZipItem(hz,i,&ze); if (zr!=ZR_OK) break; // no more // UnzipItem(hz,i, ze.name); // } // CloseZip(hz); // // // Now we indulge in a little skullduggery so that the code works whether // the user has included just zip or both zip and unzip. // Idea: if header files for both zip and unzip are present, then presumably // the cpp files for zip and unzip are both present, so we will call // one or the other of them based on a dynamic choice. If the header file // for only one is present, then we will bind to that particular one. ZRESULT CloseZipU(HZIP hz); unsigned int FormatZipMessageU(ZRESULT code, TCHAR *buf,unsigned int len); bool IsZipHandleU(HZIP hz); #ifdef _zip_H #undef CloseZip #define CloseZip(hz) (IsZipHandleU(hz)?CloseZipU(hz):CloseZipZ(hz)) #else #define CloseZip CloseZipU #define FormatZipMessage FormatZipMessageU #endif #endif // _unzip_H ”
最新发布
10-28
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值