vs2008 使用指南 请教
vs2008吧
全部回复
仅看楼主
level 2
guocong89 楼主
请问visual Studio 的解决方案一次只能打开一个么?想同时打开多个工程,就要把它们放在同一解决方案下是么?
但是这样的话这些工程的默认输出路径就是解决方案所在的目录,还要在属性中改一下,有没有简单点的方法?
还有,使用"清理项目"工具会把生成的.exe也删除掉,怎么能只删除中间文件而保留 .exe呢?
我在vc6.0下写了个压缩函数,在vc下编译后完全正常,可是在vs2008下编译完却不能运行,请问怎么回事?
谢谢各位大牛的帮助啊!!谢谢啊!!
#include "stdlib.h"
#include "iomanip"
#include"string.h"
#include"stdio.h"
#include"fstream"
#include "iostream"
#include "ctype.h"
#include "windows.h"
#include "direct.h"
using namespace std;
#define MaxLen 4//最大不压缩的连续字符数
#define DIVIDE '`'//标识符
#define Fout(pre) if((pre)==DIVIDE) fout<<DIVIDE;fout<<(pre)
#define NOTE "`guocongguocong`"//新文件标识符
#define MaxDirLength 250//文件路径长度
bool zipdir=false;//是否压缩文件夹,全局性变量
int globalDirLen=0;//压缩文件夹的根目录长度
long infilesize=0;
int findallfiles(const char *dir , const char *keyfile);//搜索所有文件并压缩
const long fileLen(const char *filename);//获取文件长度
void fout2(ofstream &fout,char ch,int count);//压缩时向文件中输入压缩数据
void preset(ofstream &fout,const char *finname);//压入文件信息
const int rlezip(const char *finname,const char *foutname);//压缩主程序
bool isdir(const char *dir);//判断压缩对象是否是文件夹
int relativeAddress(char *dir);//获得相对路径
int trans(char *dir);//获取文件夹根目录的文件夹名长度
bool isEmptyDir(const char *dir);//判断文件夹是否为空
int printFinalInfo(char *fout);//输出压缩信息
int main(int argc,char* argv[])
{
ifstream fin;
if( argc == 3 )
{
if(argv[1][0]=='*'){//压缩当前目录
char curdir[200]={0};
_getcwd(curdir,200);
findallfiles(curdir,argv[2]);
}
else if(isdir(argv[1])) {//压缩文件夹
zipdir=true;
if(argv[1][1]!=':' ){
char curdir[200]={0};
_getcwd(curdir,200);
strcat(curdir,"\\");
strcat(curdir,argv[1]);
globalDirLen=trans(curdir);
findallfiles(curdir,argv[2]);
printFinalInfo(argv[2]);
return 0;
}
globalDirLen=trans(argv[1]);
findallfiles(argv[1],argv[2]);
}
else rlezip(argv[1],argv[2]);//压缩单文件
printFinalInfo(argv[2]);
}

2009年03月24日 01点03分 1
level 2
guocong89 楼主
else if( argc > 3 ){//压缩多文件
for(int i=1;i<argc-1;i++)
rlezip(argv[i],argv[argc-1]);
printFinalInfo(argv[argc-1]);
}
return 0;
}
int trans(char *dir)
{
if(strlen(dir)==2) return 2;
if(strlen(dir)==3) return 3;
int z=strlen(dir);
while(dir[z-1]!='\\'){
z--;
}
return z;
}
int findallfiles(const char *dir , const char *keyfile)
{
char dircur[MaxDirLength],dirnext[MaxDirLength],dirfile[MaxDirLength];
char filename[MaxDirLength];
HANDLE  f1;   
WIN32_FIND_DATA  fData; 
strcpy(dircur,dir);//当前目录
strcpy(dirfile,dircur);//查找文件目录
strcat(dirfile,"//*");
f1=FindFirstFile(dirfile,&fData);
if((fData.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY) 
== FILE_ATTRIBUTE_DIRECTORY){
if((fData.cFileName)[0]!='.'){
strcpy(dirnext,dircur);
strcat(dirnext,"//*");//递归的下级目录
strcat(dirnext,(const char *)fData.cFileName);
if(isEmptyDir(dirnext)){//压缩空文件夹
ofstream fout;
fout.open(keyfile,ios::app|ios::binary);
preset(fout,dirnext);
fout.close();
}
else findallfiles(dirnext,keyfile);

}
else {
strcpy(filename,dircur);
strcat(filename,"//");
strcat(filename,(const char *)fData.cFileName);
rlezip(filename,keyfile);
}
while(FindNextFile(f1,&fData)){
if((fData.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY) 
== FILE_ATTRIBUTE_DIRECTORY){
if((fData.cFileName)[0]!='.'){
strcpy(dirnext,dircur);
strcat(dirnext,"//");
strcat(dirnext,(const char *)fData.cFileName);
if(isEmptyDir(dirnext)){
ofstream fout;
fout.open(keyfile,ios::app|ios::binary);
preset(fout,dirnext);
fout.close();
}
else findallfiles(dirnext,keyfile);
}
}
else
{
strcpy(filename,dircur);
strcat(filename,"//");
strcat(filename,(const char *)fData.cFileName);
rlezip(filename,keyfile);
}
}
FindClose(f1);
return 1;
}
const long fileLen(const char *filename)
{
ifstream fin;
fin.open(filename,ios::binary);
fin.seekg(0,ios::end);
long len=fin.tellg();
return len;
}
void fout2(ofstream &fout,char ch,int count)
{
if(count==1) {Fout(ch);}
else if(count<=MaxLen){
for(int i=0;i<count;i++){
Fout(ch);
}
}
else{
fout<<"`"<<count<<"`";

2009年03月24日 01点03分 2
level 2
guocong89 楼主
Fout(ch);
}
}
void preset(ofstream &fout,const char *finname)
{
char filename[200];
strcpy(filename,finname);
fout<<NOTE;
relativeAddress(filename);
fout<<' '<<filename;
fout<<endl;
}
const int rlezip(const char *finname,const char *foutname)
{
ifstream fin;
ofstream fout;
fin.open(finname,ios::binary);
if(!fin){
cerr<<finname<<"压缩文件打开失败!\n"
<<"请检查文件是否存在!\n";
fin.close();
return 0;
}
fout.open(foutname,ios::app|ios::binary);
if(!fout){
cerr<<"压缩文件创建失败!\n请检查磁盘空间是否充足!\n";
fin.close();
fout.close();
return 0;
}
printf("\t正在压缩 %s , 请稍后…\n",finname);
preset(fout,finname);
char cur,pre;//分别为当前字符和前一个字符
int count=1;//记录字符重复次数
fin.get(cur);
while(!fin.eof()){
pre=cur;
fin.get(cur);
if(pre!=cur){
fout2(fout,pre,count);
count=1;
}
else{
count++;
}
}
printf("%s压缩成功!\n",finname);
fin.close();
fout.close();
infilesize+=fileLen(finname);
printf("%ld\n",infilesize);
return 1;
}
bool isdir(const char *dir)
{
int i=0;
while(dir[i]){
if(dir[i]=='.') return false;
i++;
}
return true;
}
int relativeAddress(char *dir)
{
if(globalDirLen==0){
int i=strlen(dir),j;
while(dir[i]!='\\' && i>0 ) i--;
if(i==0) return 1;
i++;j=i;
while(dir[j]){
dir[j-i]=dir[j];
j++;
}
dir[j-i]=0;
return 1;
}
else{
int i=0;
int len=globalDirLen;
i=len;
while(dir[i]){
dir[i-len]=dir[i];
i++;
}
dir[i-len]=0;
return 1;
}
}
bool isEmptyDir(const char *dir)
{
char dirfile[MaxDirLength];
HANDLE f1;
WIN32_FIND_DATA fData;
strcpy(dirfile,dir);
strcat(dirfile,"//*");
f1=FindFirstFile(dirfile,&fData);
if((fData.cFileName)[0]!='.') {FindClose(f1);return false;}
while(FindNextFile(f1,&fData)){
if((fData.cFileName)[0]!='.') {FindClose(f1);return false;}
}
FindClose(f1);
return true;
}
int printFinalInfo(char *fout)
{
printf("\n\t原文件大小 : %9ld 字节\n",infilesize);
long finalfilesize=fileLen(fout);
printf("\t压缩后大小 : %9ld 字节\n",finalfilesize);
printf("\t压  缩  率 : %9.2f%%\n",(float)finalfilesize*100/infilesize);
return 0;
}
2009年03月24日 01点03分 3
level 0
加群27900549
2009年04月06日 08点04分 4
level 0
ding
2009年09月02日 10点09分 5
level 1
vs2008 can not open file "windows.h".求指点。QQ:596944390
2011年05月25日 05点05分 7
level 1
好复杂啊。。
2011年10月07日 11点10分 8
1