关于C++ 文件夹资源PAK打包解包程序源码的问题求助!

// MakeFilePackDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "MakeFilePack.h"
#include "MakeFilePackDlg.h"
#include "CJShell.h"
#include ".\makefilepackdlg.h"
#include
#include "../engine/include/engine.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// 对话框数据
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// CMakeFilePackDlg 对话框

CMakeFilePackDlg::CMakeFilePackDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMakeFilePackDlg::IDD, pParent)
, m_strSrcPath(_T(""))
, m_strPackExtName(_T("pak"))
, m_bCompress(TRUE)
, m_nZipLevel(6)
, m_bEnc(TRUE)
, m_bEncHeaderOnly(FALSE)
, m_bDefaultPassword(TRUE)
, m_strPassword(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMakeFilePackDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strSrcPath);
DDX_Text(pDX, IDC_EDIT2, m_strPackExtName);
DDX_Check(pDX, IDC_CHECK1, m_bCompress);
DDX_Text(pDX, IDC_EDIT3, m_nZipLevel);
DDX_Control(pDX, IDC_SPIN1, m_wndSpinZipLevel);
DDX_Check(pDX, IDC_CHECK2, m_bEnc);
DDX_Control(pDX, IDC_EDIT3, m_wndEditZipLevel);
DDX_Check(pDX, IDC_ENCHEADERONLY, m_bEncHeaderOnly);
DDX_Check(pDX, IDC_DEFAULT_PASSWORD, m_bDefaultPassword);
DDX_Text(pDX, IDC_PASSWORD, m_strPassword);
}

BEGIN_MESSAGE_MAP(CMakeFilePackDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_ADD_DIR, OnBnClickedAddDir)
ON_BN_CLICKED(IDC_ADD_DIRS, OnBnClickedAddDirs)
ON_BN_CLICKED(IDC_CLEAR_DIR, OnBnClickedClearDir)
ON_BN_CLICKED(IDC_MAKEPACK, OnBnClickedMakepack)
ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
ON_BN_CLICKED(IDC_CHECK2, OnBnClickedCheck2)
ON_BN_CLICKED(IDC_DEFAULT_PASSWORD, OnBnClickedDefaultPassword)
ON_BN_CLICKED(IDC_EXPORTPACK, OnBnClickedExportpack)
END_MESSAGE_MAP()

// CMakeFilePackDlg 消息处理程序
class CMyCommandLineInfo : public CCommandLineInfo
{
public:
bool bZip;
bool bEnc;
CString m_strPath;
int m_iIndex;

CMyCommandLineInfo()
{
    m_iIndex = 0;
    bZip = false;
    bEnc = false;
}

void ParseParam(
    const char* pszParam,
    BOOL bFlag,
    BOOL bLast)
{
    if(m_iIndex == 0) m_strPath = pszParam;
    else if(stricmp(pszParam,"enc") == 0)
        bEnc = true;
    else if(stricmp(pszParam,"zip") == 0)
        bZip = true;
    m_iIndex++;
}

};

BOOL CMakeFilePackDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将\“关于...\”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
        pSysMenu->AppendMenu(MF_SEPARATOR);
        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE);         // 设置大图标
SetIcon(m_hIcon, FALSE);        // 设置小图标

// TODO: 在此添加额外的初始化代码
m_wndEditZipLevel.EnableWindow(m_bCompress);
m_wndSpinZipLevel.EnableWindow(m_bCompress);

m_wndSpinZipLevel.SetRange32(0,9);
CMyCommandLineInfo cmdLineInfo;
AfxGetApp()->ParseCommandLine(cmdLineInfo);
if(cmdLineInfo.m_iIndex > 0)
{
    m_bEnc = cmdLineInfo.bEnc;
    m_bCompress = cmdLineInfo.bZip;
    m_strSrcPath =cmdLineInfo.m_strPath;
    UpdateData(FALSE);

    OnBnClickedMakepack();
    PostMessage(WM_CLOSE);
}

return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE

}

void CMakeFilePackDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。

void CMakeFilePackDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // 使图标在工作矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
}
else
{
    CDialog::OnPaint();
}

}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CMakeFilePackDlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}

static LPCTSTR GetBrowseFolder()
{
static CCJShell s_dlg;
if(s_dlg.BrowseForFolder(AfxGetMainWnd()))
{
if(s_dlg.m_strPath.Right(1) == '\')
s_dlg.m_strPath.Delete(s_dlg.m_strPath.GetLength()-1,1);
return s_dlg.m_strPath;
}
return NULL;
}

void CMakeFilePackDlg::OnBnClickedAddDir()
{
// TODO: 在此添加控件通知处理程序代码
LPCTSTR lpszDir;
if(lpszDir = GetBrowseFolder())
{
UpdateData(TRUE);
if(m_strSrcPath.IsEmpty() || m_strSrcPath.Right(1) == _T('\n'))
m_strSrcPath += lpszDir;
else
{
m_strSrcPath += _T("\r\n");
m_strSrcPath += lpszDir;
}
UpdateData(FALSE);
}

}

void CMakeFilePackDlg::OnBnClickedAddDirs()
{
// TODO: 在此添加控件通知处理程序代码
LPCTSTR lpszDir;
if(lpszDir = GetBrowseFolder())
{
CFileFind ff;
CString strFind;
strFind.Format(_T("%s\*"),lpszDir);
BOOL b = ff.FindFile(strFind);
UpdateData(TRUE);
m_strSrcPath = _T("");
while(b)
{
b = ff.FindNextFile();
if(ff.IsDirectory() && !ff.IsDots())
{
TCHAR szDir[MAX_PATH];
_stprintf(szDir,_T("%s\%s\r\n"),lpszDir,ff.GetFileName());
m_strSrcPath += szDir;
}
}
UpdateData(FALSE);
}
}

void CMakeFilePackDlg::OnBnClickedClearDir()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_strSrcPath = _T("");
UpdateData(FALSE);
}

void CMakeFilePackDlg::OnBnClickedMakepack()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
std::istrstream str(m_strSrcPath);
if(m_strPackExtName.IsEmpty())
m_strPackExtName = _T("pak");
char szPath[MAX_PATH];
while(1)
{
szPath[0] = 0;
str.getline(szPath,sizeof(szPath));
if(!szPath[0]) break;
char* p = szPath + strlen(szPath)-1;
while(p != szPath && (*p == '\r' || *p == '\n'))
{
*p = 0;
--p;
}

    char szPackName[MAX_PATH];      
    sprintf(szPackName,"%s.%s",szPath,m_strPackExtName);
    int nEnc = 0;
    if(m_bEnc)
    {
        if(m_bEncHeaderOnly) nEnc = 2;
        else nEnc = 1;
    }

    const char* pszPassword = NULL;
    if(m_bEnc)
    {
        if(!m_bDefaultPassword) pszPassword = m_strPassword;
    }

    std::vector<std::string> aFilter;
    BOOL bStop = FALSE;
    if(!PackAggregate::MakePackDir(szPath,szPackName,m_bCompress,nEnc,m_nZipLevel,pszPassword,aFilter,NULL,bStop,NULL))
    {
        CString strMsg;
        strMsg.Format(_T("打包%s失败!"),szPath);
        AfxMessageBox(strMsg);
    }
}

}

void CMakeFilePackDlg::OnBnClickedCheck1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_wndEditZipLevel.EnableWindow(m_bCompress);
m_wndSpinZipLevel.EnableWindow(m_bCompress);
}

void CMakeFilePackDlg::OnBnClickedCheck2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
GetDlgItem(IDC_ENCHEADERONLY)->EnableWindow(m_bEnc);
GetDlgItem(IDC_DEFAULT_PASSWORD)->EnableWindow(m_bEnc);
GetDlgItem(IDC_PASSWORD)->EnableWindow(m_bEnc && (!m_bDefaultPassword));
}

void CMakeFilePackDlg::OnBnClickedDefaultPassword()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
GetDlgItem(IDC_PASSWORD)->EnableWindow(m_bEnc && (!m_bDefaultPassword));
}

void CMakeFilePackDlg::OnBnClickedExportpack()
{
// TODO: 在此添加控件通知处理程序代码
PackAggregate PakAggregate;

BYTE des_key[3][8];
PasswordToDesKey( PackAggregate::GetDefaultPassword(),des_key[0],des_key[1],des_key[2] );
PakAggregate.SetDesKey((const BYTE*)des_key);

**// 2010 3 Can't Use
//PakAggregate.openAggregate( "test\\1.pak" );
//if (PakAggregate.openAggregate("test\\2.pak"))
//{
//  PakAggregate.tOutputFunc;
//}
//else
//{
    // 打开图形包失败
//Assert(0);

// }
**

}
把最后一段的//取消掉。程序编译的时候会报错,什么东西不能在右边的错误,求帮助,是不是这个代码不全?因为不取消掉最后一段的//,生成出来的程序能正常使用,但是无法解包,一并求解决!搞了一个通宵。没有办法了,求大神帮忙!

2个回答

hackerlank
hackerlank 你好,应该是你理解错误我的问题了,我需要把文件夹打包成PAK,让客户端读取,并不是打包成压缩文件。
接近 3 年之前 回复

PakAggregate.openAggregate( "test\1.pak" ); 看看这个函数是否存在,或者是文件是否存在,或者文件的路径是否正确。。

shen_wei
华夏文明,永续前进,进化不止,飞升无限! PackAggregate 这个类是哪里的??得看这个类的内容。。。
接近 3 年之前 回复
hackerlank
hackerlank 是指PakAggregate.openAggregate 还是test\1.pak?
接近 3 年之前 回复
hackerlank
hackerlank 首先谢谢您的热心回答,因为我是新手,并且不是专业程序员,PakAggregate.openAggregate( "test\1.pak" ); 文件目录都存在,但是点击程序,解压按钮,没有任何反应。但是使用程序打包正常,并且测试打包后的PAK解压,也是没有反应!求解!需要我提供其他文件吗?
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
PAK打包解包
L版征途改版本要用到的工具,具体自行下载测试,L版本
植物大战僵尸PAK打包解包方法
介绍了如何将PVZ里的资源PAK进行打包和解包,建议用C++来完成
mdb打包解包程序源码
mdb 打包 解包 程序 源码 用记事本打开Cnnsc.asp文件,找到Cnnsc.mdb,把Cnnsc.mdb改成您想要的名称
UE4 PAK加载资源
1.创建一个PAK文件:用CMD运行打开D:\Epic Games\UE_4.15\Engine\Binaries\Win64下有个UnrealPak文件cd到路径后 通过运行时传递参数 UnrealPak.exe [要生成的pak文件] -create=[要打包的文件列表] -order=[文件在pak中排序描述文件] [输出格式] [是否加密] [是否压缩]例如:UnrealPak.exe t...
pak压缩器下载资源
pak压缩器下载资源
RDB资源打包解包工具
Tencent(腾讯QQ)的资源数据包的后缀名。修改此处数据可以更改QQ的默认皮肤等。
Chromium中添加pak资源
一 综述   Chromium是支持各国语言的,那么这就涉及到国际化问题,chrome_string 是关于国际化的项目(Project),chrome_string 会在 chrome 编译之前编译,它将国际化定义的文件转换成资源文件(.pak)和 C++ 头文件,C++ 头文件将作为源代码在编译 chrome 时一起被编译。通过分析chromium的国际化流程,我们可以把自己的资源(图片,j
PAK文件读取易语言源码
易语言pak教程,欢迎大家下载。谢谢
c iso8583打包解包
多谢
打包解包程序,安装程序
将文件打包解包的代码,可以将文件打包到EXE 文件中, EXE文件运行自己解包文件出来
vc编写的打包解包程序
用vc编写的打包解包程序,根据某种格式打包解包文件
关于.pak文件的文件类型
请问很多游戏中的.pak文件是什么类型的压缩文件,用什么软件可以解压,我想解出里面的部分图片资源
网站在线打包解包程序
通过本程序能够方便的将网站目录迅速打包成一个文件。并佩带有响应的解包程序。对网站管理者来说非常方便实用。
打包解包
#include "stdafx.h" #include "iostream" #include "fstream" #include &lt;string.h&gt; using std::fstream; using std::ios; using std::string; struct index { size_t offset;//文件偏移量 size_t FillSiz...
关于文件夹浏览问题的求助
请问如何在PB中实现诸如windows中定位文件夹时的那个文件夹浏览功能??请各位大虾指点。谢谢!
求助 关于文件夹拷贝的问题
我写了一个文件夹拷贝的,但是我如果想拷贝文件,这里的srcpath、destpath路径都为文件,rn就会报空指针异常,不知道是怎么回事 求指教 [code=java]package IO;rn/**rn * 文件夹拷贝rn */rnimport java.io.File;rnrnpublic class File08 rnrn public static void main(String[] args) rn String srcpath ="e:/program/study";rn String destpath="e:/program/dir";rn rn rn try rn util.copyFileDire(srcpath,destpath);rn catch (Exception e) rn e.printStackTrace();rn rnrn rn rn[/code] [code=java]package IO;rnrnimport java.io.File;rnimport java.io.FileInputStream;rnimport java.io.FileOutputStream;rnimport java.io.InputStream;rnimport java.io.OutputStream;rnrnpublic class util rn //文件路径 rn public static void copyFile(String srcpath,String destpath) throws Exceptionrn File src = new File(srcpath);rn File dest = new File(destpath);rn copyFile(src, dest);rn rn rn //文件对象rn public static void copyFile(File src,File dest) throws Exceptionrn rn if(!src.isFile())rn System.out.println("不是文件!");rn throw new Exception("操作错误");rn rn if(!dest.exists())rn dest.createNewFile();rn rn InputStream in = new FileInputStream(src);rn OutputStream out =new FileOutputStream(dest);rn rn byte [] buf = new byte[1024];rn int len =0;rn while(-1!=(len=in.read(buf)))rn out.write(buf, 0, len);rn out.flush();rn rn rn rn //文件夹拷贝rn public static void copyFileDire(String srcpath,String destpath)rn File src =new File(srcpath);rn File dest =null;rn if(src.isDirectory())rn dest= new File(destpath,src.getName());rn rn copyFiledetail(src,dest);rn rn public static void copyFiledetail(File src,File dest)rn if(src.isFile())rn try rn util.copyFile(src, dest);rn catch (Exception e) rn e.printStackTrace();rn rn else if(src.isDirectory())rn dest.mkdirs();rn for(File temp:src.listFiles())rn copyFiledetail(temp,new File(dest,temp.getName()));rn rn rn rnrnrn[/code]
求助!!!!关于文件夹映射的问题
最近的一个项目,其中一部分文件夹内容较大,所以被映射到其他硬盘的盘符下。rnrn现在程序需要统计出这些硬盘的信息。rnrn由于硬盘信息为未知信息,所以我是想通过文件夹获取映射盘的信息。rn但我不知道怎么获取映射信息,rnrn望大侠们出手相救啊!!!!!!!!!!!!!rnrn
c教程源码资源
c教程源码资源
vc中如何使用pak打包的资源
程序中用到了大量的图片,想打包成pak,然后在程序中调用。rn请教一下需要如何实现?
国内某游戏PAK资源解包代码
最近在研究虚拟文件系统,VFS,已经能够搞的差不多了,但是有一个数据结构一直搞不定,结构体指针就每月有办法去很好的操作数据,很是无奈。 还是功力不够,需要再练习和学习。下面是国内某游戏的pak文件解压,其实已经把最主要的内容放在这里来了,比起我的黑盒调用,人家这才是完全的解析哈。 共享来共需要的人一起学习吧。
彩虹岛SPF打包解包源码
用于打包彩虹岛SPF文件或解包,纯源码,可以直接运行~~~~~~~~~~~~~
U3D结合第三方库ICSharpCode.SharpZipLib 实现文件夹打包解包
主要实现在U3D中上传,解压功能。 工程连接地址:http://yun.baidu.com/share/link?shareid=3943958753&uk=2518267004
【求助】关于c的一个入门级程序的问题
要求是这样的rn可读写方式打开文本类型的数据文件,此文件默认为c:\students.dat。若该文件不存在,则新建此文件。当打开文件操作成功后,从文件中一次读出一条记录,添加到新建的数组中,然后执行显示主菜单和进入主循环操作,并进行按键判断。rn在判断键值时,有效输入为0~12之间的任意整数,其他输入都被视为错误按键:rn若输入0,则会判断在对记录进行了更新操作之后是否进行了存盘操作。若未存盘,系统会提示用户是否需要进行数据存盘,用户输入Y或y,系统会进行存盘操作。左后系统执行推出电话簿管理系统的操作。rn若输入1,则录入学生信息;rn若输入2,则显示所有学生信息rn若输入3,则按学号查询学生信息rn若输入4,则按姓名查询学生信息(支持模糊查询)rn若输入5,则按年龄查询学生信息rn若输入6,则查询指定学生的所在系的信息(包括系名、系主任、系的办公地点)rn若输入7,则修改学生信息rn若输入8,则删除学生信息rn若输入9,则追加学生信息rn若输入10,则保存学生信息到文件rn若输入11,则从文件载入学生信息rn若输入12,则按成绩从高到低显示所有学生信息rn1)学生信息(struct student)用链表表示;rn2)系信息(struct department)用结构数组表示;rn我自己编写出来rn[code=c][/code]rn#include rn#include rn#include rn#include rnstruct student /*学生信息*/rnrn char num[20]; /*学号*/rn char name[20]; /*姓名*/rn char sex; /* 性别,'1'->男, '0'->女*/rn short age; /*年龄*/rn short score[3]; /*三门课程的成绩*/rn short sum; /*总成绩*/rn short deptid; /*所在系的系号*/rn struct student *next;rn;rnrn/*创建一个新的链表*/rnstruct students *create()rnrn struct * students; p, *q, *head=NULL;rn int k, m=1;rn char tmp[20];rn printf("输入结点的个数:");rn gets(tmp);rn k=atoi(tmp);rn while(k)rn rn p=(struct students *)malloc(sizeof(struct) students);rn printf("\n======请输入第%d个结点的信息======\n", m);rn printf("学号:");rn gets(p->num);rn printf("姓名:");rn gets(p->name);rn printf("性别:");rn gets(p->sex); /* 性别,'1'->男, '0'->女*/rn printf("年龄:");rn gets(p->age);rnprintf("三门课的成绩:");rn gets(p->score);rn printf("总成绩:");rn gets(p->sum:");rnprintf("所在的系号:");rn gets(p->deptid);rn if(m==1)rn head=p;rn elsern q->next=p;rn q=p;rn p->next=NULL;rn k--;rn m++;rn rn return head;rnrnstruct department /*系信息,假设总共有3个系*/rnrn short id; /*系号*/rn char name[30]; /*系名*/rn char dean[20]; /*系主任*/rn char location[30]; /*系的办公地点*/ rn;rnint main()rnrnstruct department emp[3];rnint i;rnfor(1=0;i<3;i++)rnrnprintf("系号:");scanf("%d",&emp[i].id)'rnprintf("系名:");scanf("%d",&emp[i].name)'rnprintf("系主任:");scanf("%d",&emp[i].dean)'rnprintf("系的办公地点:");scanf("%d",&emp[i].location)'rn/*主菜单*/rnint menu()rnrn int c=0;rn char s[3];rn system("cls");rn printf(" 学生信息管理系统\n");rn printf("=====================\n");rn printf(" 1. 录入学生信息\n");rn printf(" 2. 显示所有学生信息\n");rn printf(" 3. 按学号查询学生信息\n");rn printf(" 4.按姓名查询学生信息 \n");rn printf(" 5. 按年龄查询学生信息\n");rn printf(" 10. 追加人员信息(在起始处)\n");rn printf(" 9. 追加人员信息(在末尾处)\n");rn printf(" 8. 删除人员信息\n");rn printf(" 7. 修改人员信息\n");rn printf(" 13. 按关键字升序插入到链表\n");rn printf(" 11. 保存人员信息到文件\n");rn printf(" 12. 从文件载入人员信息\n");rn printf(" 0. 退出系统\n");rnrn dorn printf("\n请选择功能(0-13): "); /*在菜单窗口外显示提示信息*/rn gets(s); /*输入选择项*/rn c=atoi(s); /*将输入的字符串转化为整形数*/rn while(c<0||c>13); /*选择项不在0~14之间重输*/rn return c; rnrnrnvoid enterToContinue() /*按回车继续*/rnrn printf("\n按 Enter 继续...\n"); rn getchar();rn return;rnrnrn/*退出系统,判断是否真的退出*/rnvoid exitSys()rnrn char x;rn printf("你真的要退出系统吗?(Y/N)");rn while(1)rn rn x=getche();rn if(x=='y' || x=='Y' || x=='n' || x=='N' )rn break;rn printf("\b");rn rn if(x=='y' || x=='Y')rn rn printf("\n");rn exit(0);rn rn return;rnrnrnvoid main()rnrn struct students *h=NULL;rn int choice=0;rn while(1)rn rn choice=menu();rn switch (choice)rn rn case 1: h=create(); enterToContinue(); break;rn case 2: display(h); enterToContinue(); break;rn case 3: h=insertAtBegin(h); enterToContinue(); break;rn case 4: h=insertAtEnd(h); enterToContinue(); break;rn case 5: h=deleteOnName(h); enterToContinue(); break;rn case 6: h=updateOnName(h); enterToContinue(); break;rn case 7: h=insertOnName(h); enterToContinue(); break;rn case 8: saveNode(h); break;rn case 9: h=loadNode(); break;rn case 10:h=insertOnName(h); enterToContinue(); break;rn case 11:h=insertOnName(h); enterToContinue(); break;rn case 12:h=insertOnName(h); enterToContinue(); break;rn case 0: exitSys();rn rn rn return;rnrnrn;rnrn我是一只小白刚学了没有多久希望能有热心人帮我指导下,让我完成这个小程序
关于加减乘除的C程序求助
rn[img=https://img-bbs.csdn.net/upload/201905/19/1558277734_722020.png][/img]rnrn这个程序首先要求用户选择加/减/乘/除,如图片所示,输入a后,仍然显示要求输入a或s或m或d,相关的是char get_choice()函数,请看下问题出在哪里?rnrn#include rnchar get_choice(); /*读取加减乘除选项*/ rnchar get_first(); /*只读取第一个字符*/ rnfloat get_num(); /*读取要计算的数字*/ rnrnint main()rnrn int choice;rn float num_1,num_2;rn rn while((choice=get_choice()) != 'q') /*期望输入字符a,s,m,d*/ rn rn printf("Enter first number:\n");rn num_1 = get_num(); /*输入第一个数字*/ rn printf("Enter second number:\n");rn num_2 = get_num(); /*输入第二个数字*/ rn switch(choice)rn rn case 'a': printf("%.2f + %.2f = %.2f.\n",num_1+num_2);/*如果输入字符a,做加法*/ rn break;rn case 's': printf("%.2f - %.2f = %.2f.\n",num_1-num_2);/*如果输入字符s,做减法*/ rn break;rn case 'm': printf("%.2f * %.2f = %.2f.\n",num_1*num_2);/*如果输入字符m,做乘法*/ rn break;rn case 'd': if(num_2 == 0) /*做除法,如果分母等于0,要求重新输入*/ rn rn printf("Please enter a number other than 0:");rn while((num_2 = get_num()) == 0) /*一直输入,直到分母不等于0*/ rn continue;rn printf("%.2f / %.2f = %.2f.\n",num_1/num_2);rn break;rn rn else rn printf("%.2f / %.2f = %.2f.\n",num_1/num_2);rn break;rn default: printf("Error!\n");rn break;rn rn printf("Bye!.\n");rn rn rnrnrnchar get_choice()rnrn int ch;rn rn printf("Enter the operation of your choice:\n");rn printf("a. add s. subtract\n");rn printf("m. multiply d. divide\n");rn printf("q. quit\n");rn ch = get_first();rn while((ch != 'a' || ch != 's' || ch != 'm' || ch != 'd') && ch != 'q') /*如果输入的字符不等于a或s或m或d,并且不是q,那么要求重新输入*/ rn rn printf("Please respond with a,s,m,d or q.\n");rn ch = get_first();rn rn return ch;rnrnrnchar get_first()rnrn int ch;rn rn ch = getchar();rn while(getchar() != '\n') rn continue; /*只读取第一个字符,跳过后续字符包括回车行*/ rn return ch;rnrnrnfloat get_num()rnrn float num;rn char ch;rn rn while((scanf("%f",&num)) != 1) /*如果输入的不是数字*/ rn rn while((ch=getchar()) != '\n')rn putchar(ch);rn printf(" is not number.\n");rn printf("Please input a number:\n");rn rn return num;rnrnrn
关于创建项目下资源文件夹命名的问题
偶然发现,我新建的项目,将css文件夹和js文件夹放在了static文件夹下,static文件夹直属于项目跟目录,发布到tomcat后,通过URL居然访问不到该资源文件,提示404错误...
简单C函数实现的打包解包小工具
简单C函数实现的打包解包小工具:基本上只用C语言文件操作函数fopen,fread fwrite等实现的打包小工具
wp7上关于资源文件夹
我在项目中新建了一个文件夹ABC,并且拷贝了若干txt进去,想用作资源。rnrnIsolatedStorageFile中的成员函数DirectoryExists去检查ABC是否存在,一直返回false。rnrn我想知道怎么遍历我自己加入的文件夹。rnrn谢谢rnrnrnrn
求助 关于文件夹权限问题
求助各位高手rn我要怎么样才能设置文件夹的访问权限
关于文件夹批量替换求助、、、、、
遇见个问题:rnrnA 文件夹中有N个文件夹,分别是 B1 、B2、B3、B4 B5 B6 B7 B8 ..................................rnrn在这些 B1 、B2、B3、B4 B5 B6 B7 B8 ..................................文件夹中又含有相同的文件夹:C rnrnrn现在想用相同文件夹名字的C 文件夹 , 来批量替换文件夹B1 、B2、B3、B4 B5 B6 B7 B8 ..................................内的 C ,2个C文件夹里的内容不同rnrn如何可以实现? 最好是批处理rnrn说明:是文件夹!不是文件,多谢
求助...关于复制文件夹
网上找的代码硬是没看懂怎么用到自己的程序里面去,这个方法怎么用到btn的Click方法里面去?rnstring srcdir, string desdir 这2个是文件夹名称和路径参数吗?rn[code=csharp]rn private void CopyDirectory(string srcdir, string desdir)rn rn string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + 1);rnrn string desfolderdir = desdir + "\\" + folderName;rnrn if (desdir.LastIndexOf("\\") == (desdir.Length - 1))rn rn desfolderdir = desdir + folderName;rn rn string[] filenames = Directory.GetFileSystemEntries(srcdir);rnrn foreach (string file in filenames)// 遍历所有的文件和目录rn rn if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件rn rnrn string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + 1);rn if (!Directory.Exists(currentdir))rn rn Directory.CreateDirectory(currentdir);rn rnrn CopyDirectory(file, desfolderdir);rn rnrn else // 否则直接copy文件rn rn string srcfileName = file.Substring(file.LastIndexOf("\\") + 1);rnrn srcfileName = desfolderdir + "\\" + srcfileName;rnrnrn if (!Directory.Exists(desfolderdir))rn rn Directory.CreateDirectory(desfolderdir);rn rnrnrn File.Copy(file, srcfileName);rn rn //foreach rn //function end rn[/code]
关于文件夹的访问权限求助
之前做了一个应用程序,打包后就放到公司服务器里面,打包后像图片,jre,jar,还有一些其他文件都放在不同的文件夹下面rn,现在需要把存放图片,jre,jar文件的三个文件夹设置访问权限,只有管理员才能访问这几个文件夹,rn现在其他人通过快捷方式运行这个程序报错,好像是找不到这几个文件夹,但是把这几个文件夹的权限去掉,让所有人都能访问的话,程序可以正常运行,现在的问题是这几个文件夹不能被别人访问到,如何才能够使程序正常的运行起来
.pak 下载的问题
大大们。十万火急。rn[color=#FF0000][/color]rn就这个实现下载aaa。pak 能实现吗?或者想办法实现。或者怎么注册mime扩展名,不要给我说压缩后下载。也不用后台代码。就用a标签,或者浏览器输入[color=#FF0000]www.xx.com/download/aaa.pak [/color]也可以下载,尼玛老总要求的。。实在没办法了。
打包解包程序及文档(多层抽象)
金山训练营做的小东西,我是上传给自己备份的,所以资源分设了10分
关于程序的资源利用问题。
最近在整理以前的代码。rn发现为了赶工,很多重复的东西都没有做成一个类,代码很臃肿。rn比如读取数据之类的。rn现在把自己常用的一些读取,更新,删除数据库的操作(包括sql,access,xls等)都挤在一起写了个类。rn现在的问题是,我是每次要用到这些类时,new来引用,rn还是在每个过程前面加 Shared ,直接引用。rn怎么是最科学的?省资源的?速度快的?rn因为后面还会有不少这样的类。
关于程序图标资源的问题
我有一个库要集成到系统一个应用程序里面去,经过前期的研究,发现系统会自动读取我的库里面资源ID为100的一个图标(不知道是写死是100还是资源ID序号最前面的一个),我现在的问题是,由于我的程序要实现资源代码分离,能不能有什么办法把这个图标做到其他的DLL里面,而系统通过原先库的instance仍然能够读出来?(不能借助MUI,因为我已经有一个MUI来实现多语言版本,现在我需要再多做一个纯图片资源的DLL)
SIS打包解包工具 SISWare最强的Symbian程序安装包打包解包工具
SISWare是最强的Symbian程序安装包打包解包工具,签名和去除签名sis文件,创建自签名证书文件,编辑SIS文件或pkg脚本并重打包.
求助关于windows程序和普通C程序
我用C写了个简单的图书管理系统,现在想把它界面化,也看了几天windows编程的书。我想问的是,纯c语言写的函数,比如图书入库,能不能直接被windows程序调用,比如我按下确定按钮就调用图书入库函数,然后执行入库操作,因为看到windows编程下许多变量的定义都不一样了,不知道函数要不要进行修改?c函数又如何被调用?
求助,关于资源
笨人用的pocket gcc无法自动添加资源,但支持资源文件,因为示例程序中有使用.rc资源文件,rn笨人想求一些手动添加资源的资料,笨人找了好久,还是没找到多少有价值的,只知道图标可以像:rnIDI_ICON ICON "ico.ico"rn这样定义,但具体的用法和菜单等资源的定义确实一点头绪都没有,就说菜单资源吧,定义完了我试着:rnwc.lpszMenuName = MAKEINTRESOURCE(IDM_MENU);rn或者在CreateWindow的第九个参数添LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MENU));rn可是编译后都不显示菜单,也不知道是用的不对还是资源写的不对,rn所以麻烦各位哥哥,姐姐们给介绍下如何添加菜单资源和使用菜单资源,谢谢了!
求助!关于资源锁定。
我写程序中遇到下述问题:rn有一个资源S,有A、B、C三类线程要使用它。每类线程都有多个线程。同一时刻只能有一类线程使用S,如A类使用,B、C类就不能使用。同类线程可同时使用S。需使用什么样的资源锁才能完成对S的访问控制?
自动打包解包问题
import java.util.*;rnrnpublic class TestMap rn public static void main(String[] args) rn Map p1=new HashMap();rn Map p2=new HashMap();rn p1.put("one","1");rn p1.put("two","2");rn p1.put("three","3"); rn p2.put("A","1");rn p2.put("B","2");rn p2.put("C","3");rn System.out.println(p1.size());rn System.out.println(p1.containsKey("one"));rn System.out.println(p1.containsValue(1));//这句语句执行为什么是false;rn //为什么不执行if语句 rn if(p1.containsValue(2)) rn System.out.println("if语句执行");rn int i=(Integer)p2.get("B");rn System.out.println(i);rn rn Map p3=new HashMap(p1);rn p3.putAll(p2);rn System.out.println(p3);rn rnrnrn
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件