精华内容
下载资源
问答
  • vc删除文件夹以及文件夹中的内容的三种方法,以及解决XP删除文件夹出错的方法!!
  • 自动删除VC临时文件

    2021-05-16 07:13:08
    临时文件,缓存 当我们编译VC的时候,系统总是提示“X盘没有足够空间”,这是不是很烦人啊,而当你点击清除的时候,开发工具却只能删除很小的文件,这个程序就是为此功能而设计的,隔一段时间运行一次,可以把VC生成...
  • C语言如何删除VC6++编译产生的多余文件 在使用VC6++学习C/C++语言之时总是会产生一些不需要的文件,总是要定时清理,手动全选删除又会删除源文件,所以我决定写一个一键清理的程序 其实也非常简单就能搞定,这里我们...

    在使用VC6++学习C/C++语言之时总是会产生一些不需要的文件,总是要定时清理,手动全选删除又会删除源文件,所以我决定写一个一键清理的程序

    其实也非常简单就能搞定,这里我们要先调用

    #include<stdlib.h>
    

    通过该头文件下的system函数调用控制台命令:

     DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
     RD [/S] [/Q] [drive:]path
    

    del命令的用法:

    DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
    
      names         指定一个或多个文件或者目录列表。
                    通配符可用来删除多个文件。
                    如果指定了一个目录,该目录中的所
                    有文件都会被删除。
    
      /P            删除每一个文件之前提示确认。
      /F            强制删除只读文件。
      /S            删除所有子目录中的指定的文件。
      /Q            安静模式。删除全局通配符时,不要求确认
      /A            根据属性选择要删除的文件
      属性          R  只读文件            S  系统文件
                    H  隐藏文件            A  准备存档的文件
                    I  无内容索引文件      L  重新分析点
                    O  脱机文件            -  表示“否”的前缀
    
    如果命令扩展被启用,DEL 和 ERASE 更改如下:
    
    /S 开关的显示句法会颠倒,即只显示已经
    删除的文件,而不显示找不到的文件。
    

    rd命令的用法:

    RMDIR [/S] [/Q] [drive:]path
    RD [/S] [/Q] [drive:]path
    
        /S      除目录本身外,还将删除指定目录下的所有子目录和
                文件。用于删除目录树。
    
        /Q      安静模式,带 /S 删除目录树时不要求确认
    

    通过调用控制台的这两个指令完成我们的程序,代码如下:

    #include<stdlib.h>
    int main()
    {
    	//以静默的方式删除同目录以及子目录下的 *.dsw *.ncb *.opt *.dsp文件,如果不想删除子目录下的这些文件请把"/s"删除 
    	system("del /s /q *.dsw *.ncb *.opt *.dsp");
    	//先清空同目录及子目录下的Debug文件夹 
    	system("del /q /s Debug");
    	//再删除Debug文件夹,因为rd命令不能删除非空文件夹 
    	system("rd /q /s Debug");
    	//删除同目录下的*.exe文件(不会删除子目录下的该类型文件),如果不需要可自行删除该行代码 
    	system("del /q *.exe");
    	return 0;
    }
    

    是不是非常简单呢^ _^

    展开全文
  • VC自动查找并删除VC生成的临时文件 删除visual c++ build过程中生成的临时文件
  • VC6.0清理垃圾文件的小插件CleanVC.rar 清理工程目录中生成的垃圾文件.
  • VC6崩溃解决方案

    2019-03-27 15:30:27
    本资源中包含vc6插件,用此插件替换原有的vc6文件,可解决文件新建和打开时崩溃的问题,资源中赋文档和脚本,使用者可自行查阅
  • VC文件粉碎机,彻底删除无法恢复

    热门讨论 2009-08-07 17:08:23
    原理很简单,主要就是向要粉碎的文件中填充数据,使其无效,然后del掉,即使用文件恢复工具也没法恢复了,哈哈
  • 本文所述实例主要实现了删除某个盘符下指定位置的文件,可以是TXT、doc、jpeg等格式,只要选定格式后,再定义好盘符,即可一键删除所有指定类型的文件。再次提示删除前请确认,且删除后不可恢复。以下是最主要的核心...

    本文所述实例主要实现了删除某个盘符下指定位置的文件,可以是TXT、doc、jpeg等格式,只要选定格式后,再定义好盘符,即可一键删除所有指定类型的文件。再次提示删除前请确认,且删除后不可恢复。

    以下是最主要的核心代码,其它代码读者可以自己添加。

    SHFILEINFO shInfo;

    memset(&shInfo,0,sizeof(SHFILEINFO));

    HIMAGELIST hImage = (HIMAGELIST)SHGetFileInfo("C:\\",0,&shInfo, sizeof( SHFILEINFO ),

    SHGFI_SYSICONINDEX | SHGFI_SMALLICON );

    m_ImageList.Attach(hImage);

    m_ComboEx.SetImageList(&m_ImageList);

    m_ComboEx.ResetContent();

    char pchDrives[128] = {0};

    char* pchDrive;

    GetLogicalDriveStrings(sizeof(pchDrives), pchDrives); //列举盘符

    pchDrive = pchDrives;

    int nItem = 0;

    while(*pchDrive)

    {

    COMBOBOXEXITEM cbi;

    CString csText;

    cbi.mask = CBEIF_IMAGE|CBEIF_INDENT|CBEIF_OVERLAY|

    CBEIF_SELECTEDIMAGE|CBEIF_TEXT;

    SHFILEINFO shInfo; //定义文件信息

    int nIcon;

    SHGetFileInfo(pchDrive, 0, &shInfo, sizeof(shInfo),

    SHGFI_ICON|SHGFI_SMALLICON); //获取系统文件图标

    nIcon = shInfo.iIcon;

    //设置COMBOBOXEXITEM结构

    cbi.iItem = nItem;

    cbi.pszText = pchDrive;

    cbi.cchTextMax = strlen(pchDrive);

    cbi.iImage = nIcon;

    cbi.iSelectedImage = nIcon;

    cbi.iOverlay = 0;

    cbi.iIndent = (0 & 0x03);

    m_ComboEx.InsertItem(&cbi); //插入数据

    nItem++;

    pchDrive += strlen(pchDrive) + 1;

    }

    return TRUE; // return TRUE unless you set the focus to a control

    }

    void CDeleteDlg::OnSysCommand(UINT nID, LPARAM lParam)

    {

    if ((nID & 0xFFF0) == IDM_ABOUTBOX)

    {

    CAboutDlg dlgAbout;

    dlgAbout.DoModal();

    }

    else

    {

    CDialog::OnSysCommand(nID, lParam);

    }

    }

    void CDeleteDlg::OnPaint()

    {

    if (IsIconic())

    {

    CPaintDC dc(this); // device context for painting

    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Center icon in client rectangle

    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;

    // Draw the icon

    dc.DrawIcon(x, y, m_hIcon);

    }

    else

    {

    CDialog::OnPaint();

    }

    }

    HCURSOR CDeleteDlg::OnQueryDragIcon()

    {

    return (HCURSOR) m_hIcon;

    }

    void CDeleteDlg::DelFile(CString path,CString name)

    {

    CString strtemp;

    if (path.Right(1) != "\\") //判断路径是否以\结尾

    strtemp.Format("%s\\*.*",path);//设置通配符

    else

    strtemp.Format("%s*.*",path);//设置通配符

    CFileFind findfile;

    BOOL bfind = findfile.FindFile(strtemp);//查找文件

    while (bfind)//循环查找

    {

    bfind = findfile.FindNextFile();//查找下一个文件

    if(!findfile.IsDots() && !findfile.IsDirectory())

    {

    CString str = findfile.GetFileName();

    int index = str.ReverseFind('.');

    if(str.Right(str.GetLength()-index) == name)

    {

    DeleteFile(findfile.GetFilePath());

    }

    }

    else if (findfile.IsDots())

    {

    continue;

    }

    else if (findfile.IsDirectory())//如果是目录

    {

    DelFile(findfile.GetFilePath(),name);//递归查找

    }

    }

    }

    void CDeleteDlg::OnButdelete()

    {

    // TODO: Add your control notification handler code here

    CString path,name;

    m_ComboEx.GetWindowText(path);

    m_ExName.GetWindowText(name);//获得文件扩展名

    DelFile(path,name);

    MessageBox("已删除指定类型文件!");

    }

    这里省去了窗体部分的代码,进行过VC开发的朋友应该可以看得懂的。

    展开全文
  • 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入具体应用如下:一.将信息写入.INI文件中.1.所用的WINAPI函数原型为:...

    在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入

    具体应用如下:

    一.将信息写入.INI文件中.

    1.所用的WINAPI函数原型为:

    BOOL WritePrivateProfileString(

    LPCTSTR lpAppName,

    LPCTSTR lpKeyName,

    LPCTSTR lpString,

    LPCTSTR lpFileName

    );

    其中各参数的意义:

    LPCTSTR lpAppName 是INI文件中的一个字段名.

    LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.

    LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.

    LPCTSTR lpFileName 是完整的INI文件名.

    2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入 c:\stud\student.ini 文件中.

    CString strName,strTemp;

    int nAge;

    strName="张三";

    nAge=12;

    ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");

    此时c:\stud\student.ini文件中的内容如下:

    [StudentInfo]

    3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:

    strTemp.Format("%d",nAge);

    ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");

    二.将信息从INI文件中读入程序中的变量.

    1.所用的WINAPI函数原型为:

    DWORD GetPrivateProfileString(

    LPCTSTR lpAppName,

    LPCTSTR lpKeyName,

    LPCTSTR lpDefault,

    LPTSTR lpReturnedString,

    DWORD nSize,

    LPCTSTR lpFileName

    );

    其中各参数的意义:

    前二个参数与 WritePrivateProfileString中的意义一样.

    lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.

    lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.

    nSize : 目的缓存器的大小.

    lpFileName : 是完整的INI文件名.

    2.具体使用方法:现要将上一步中写入的学生的信息读入程序中.

    CString strStudName;

    int nStudAge;

    GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");

    执行后 strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".

    3.读入整型值要用另一个WINAPI函数:

    UINT GetPrivateProfileInt(

    LPCTSTR lpAppName,

    LPCTSTR lpKeyName,

    INT nDefault,

    LPCTSTR lpFileName

    );

    这里的参数意义与上相同.使用方法如下:

    nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");

    三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:

    1.写入:

    CString strTemp,strTempA;

    int i;

    int nCount=6;

    file://共有6个文件名需要保存

    for(i=0;i {strTemp.Format("%d",i);

    strTempA=文件名;

    file://文件名可以从数组,列表框等处取得.

    ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,

    "c:\\usefile\\usefile.ini");

    }

    strTemp.Format("%d",nCount);

    ::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");

    file://将文件总数写入,以便读出.

    2.读出:

    nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");

    for(i=0;i {strTemp.Format("%d",i);

    strTemp="FileName"+strTemp;

    ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil",

    strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");

    file://使用strTempA中的内容.

    }

    补充四点:

    1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.

    2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .

    3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini".

    //----------------------------------------------------------------------------------

    /*

    类名:CIni

    版本:v2.0

    最后更新:

    v2.0

    梦小孩于2004年2月14日情人节

    加入高级操作的功能

    v1.0

    梦小孩于2003年某日

    一般操作完成

    类描述:

    本类可以于.ini文件进行操作

    */

    文件 1: #pragma once

    #include "afxTempl.h"

    class CIni

    {

    private:

    CString m_strFileName;

    public:

    CIni(CString strFileName):m_strFileName(strFileName)

    {

    }

    public:

    //一般性操作:

    BOOL SetFileName(LPCTSTR lpFileName); //设置文件名

    CString GetFileName(void); //获得文件名

    BOOL SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue,bool bCreate=true); //设置键值,bCreate是指段名及键名未存在时

    ,是否创建。

    CString GetValue(LPCTSTR lpSection, LPCTSTR lpKey); //得到键值.

    BOOL DelSection(LPCTSTR strSection); //删除段名

    BOOL DelKey(LPCTSTR lpSection, LPCTSTR lpKey); //删除键名

    public:

    //高级操作:

    int GetSections(CStringArray& arrSection); //枚举出全部的段名

    int GetKeyValues(CStringArray& arrKey,CStringArray& arrValue,LPCTSTR lpSection); //枚举出一段内的全部键名及值

    BOOL DelAllSections();

    };

    文件 2:

    #include "StdAfx.h"

    #include "ini.h"

    #define MAX_ALLSECTIONS 2048 //全部的段名

    #define MAX_SECTION 260 //一个段名长度

    #define MAX_ALLKEYS 6000 //全部的键名

    #define MAX_KEY 260 //一个键名长度

    BOOL CIni::SetFileName(LPCTSTR lpFileName)

    {

    CFile file;

    CFileStatus status;

    if(!file.GetStatus(lpFileName,status))

    return TRUE;

    m_strFileName=lpFileName;

    return FALSE;

    }

    CString CIni::GetFileName(void)

    {

    return m_strFileName;

    }

    BOOL CIni::SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue,bool bCreate)

    {

    TCHAR lpTemp[MAX_PATH] ={0};

    //以下if语句表示如果设置bCreate为false时,当没有这个键名时则返回TRUE(表示出错)

    //!*&*none-value*&!* 这是个垃圾字符没有特别意义,这样乱写是防止凑巧相同。

    if (!bCreate)

    {

    GetPrivateProfileString(lpSection,lpKey,"!*&*none-value*&!*",lpTemp,MAX_PATH,m_strFileName);

    if(strcmp(lpTemp,"!*&*none-value*&!*")==0)

    return TRUE;

    }

    if(WritePrivateProfileString(lpSection,lpKey,lpValue,m_strFileName))

    return FALSE;

    else

    return GetLastError();

    }

    CString CIni::GetValue(LPCTSTR lpSection, LPCTSTR lpKey)

    {

    DWORD dValue;

    TCHAR lpValue[MAX_PATH] ={0};

    dValue=GetPrivateProfileString(lpSection,lpKey,"",lpValue,MAX_PATH,m_strFileName);

    return lpValue;

    }

    BOOL CIni::DelSection(LPCTSTR lpSection)

    {

    if(WritePrivateProfileString(lpSection,NULL,NULL,m_strFileName))

    return FALSE;

    else

    return GetLastError();

    }

    BOOL CIni::DelKey(LPCTSTR lpSection, LPCTSTR lpKey)

    {

    if(WritePrivateProfileString(lpSection,lpKey,NULL,m_strFileName))

    return FALSE;

    else

    return GetLastError();

    }

    int CIni::GetSections(CStringArray& arrSection)

    {

    /*

    本函数基础:

    GetPrivateProfileSectionNames - 从 ini 文件中获得 Section 的名称

    如果 ini 中有两个 Section: [sec1] 和 [sec2],则返回的是 ’sec1’,0,’sec2’,0,0 ,当你不知道

    ini 中有哪些 section 的时候可以用这个 api 来获取名称

    */

    int i;

    int iPos=0;

    int iMaxCount;

    TCHAR chSectionNames[MAX_ALLSECTIONS]={0}; //总的提出来的字符串

    TCHAR chSection[MAX_SECTION]={0}; //存放一个段名。

    GetPrivateProfileSectionNames(chSectionNames,MAX_ALLSECTIONS,m_strFileName);

    //以下循环,截断到两个连续的0

    for(i=0;i

    {

    if (chSectionNames[i]==0)

    if (chSectionNames[i]==chSectionNames[i+1])

    break;

    }

    iMaxCount=i+1; //要多一个0号元素。即找出全部字符串的结束部分。

    arrSection.RemoveAll();//清空原数组

    for(i=0;i

    {

    chSection[iPos++]=chSectionNames[i];

    if(chSectionNames[i]==0)

    {

    arrSection.Add(chSection);

    memset(chSection,0,MAX_SECTION);

    iPos=0;

    }

    }

    return (int)arrSection.GetSize();

    }

    int CIni::GetKeyValues(CStringArray& arrKey,CStringArray& arrValue, LPCTSTR lpSection)

    {

    /*

    本函数基础:

    GetPrivateProfileSection- 从 ini 文件中获得一个Section的全部键名及值名

    如果ini中有一个段,其下有 "段1=值1" "段2=值2",则返回的是 ’段1=值1’,0,’段2=值2’,0,0 ,当你不知道

    获得一个段中的所有键及值可以用这个。

    */

    int i;

    int iPos=0;

    CString strKeyValue;

    int iMaxCount;

    TCHAR chKeyNames[MAX_ALLKEYS]={0}; //总的提出来的字符串

    TCHAR chKey[MAX_KEY]={0}; //提出来的一个键名

    GetPrivateProfileSection(lpSection,chKeyNames,MAX_ALLKEYS,m_strFileName);

    for(i=0;i

    {

    if (chKeyNames[i]==0)

    if (chKeyNames[i]==chKeyNames[i+1])

    break;

    }

    iMaxCount=i+1; //要多一个0号元素。即找出全部字符串的结束部分。

    arrKey.RemoveAll();//清空原数组 arrValue.RemoveAll();

    for(i=0;i

    {

    chKey[iPos++]=chKeyNames[i];

    if(chKeyNames[i]==0)

    {

    strKeyValue=chKey;

    arrKey.Add(strKeyValue.Left(strKeyValue.Find("=")));

    arrValue.Add(strKeyValue.Mid(strKeyValue.Find("=")+1));

    memset(chKey,0,MAX_KEY);

    iPos=0;

    }

    }

    return (int)arrKey.GetSize();

    }

    BOOL CIni::DelAllSections()

    {

    int nSection;

    CStringArray arrSection;

    nSection=GetSections(arrSection);

    for(int i=0;i

    {

    if(DelSection(arrSection[i]))

    return GetLastError();

    }

    return FALSE;

    }

    使用方法:

    CIni ini("c:\\a.ini");

    int n;

    /*获得值

    TRACE("%s",ini.GetValue("段1","键1"));

    */

    /*添加值

    ini.SetValue("自定义段","键1","值");

    ini.SetValue("自定义段2","键1","值",false);

    */

    /*枚举全部段名

    CStringArray arrSection;

    n=ini.GetSections(arrSection);

    for(int i=0;i

    TRACE("%s\n",arrSection[i]);

    */

    /*枚举全部键名及值:

    CStringArray arrKey,arrValue;

    n=ini.GetKeyValues(arrKey,arrValue,"段1");

    for(int i=0;i

    TRACE("键:%s\n值:%s\n",arrKey[i],arrValue[i]);

    */

    /*删除键值

    ini.DelKey("段1","键1");

    */

    /*删除段

    ini.DelSection("段1");

    */

    /*删除全部

    ini.DelAllSections();

    */

    VC++中以追加方式向文本文件写入数据

    在VB、Asp中向文本文件追加数据很容易,只要设定一个参数为ForAppending就行了。

    Sub OpenTextFileTest

    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    Dim fso, f

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)

    f.Write "Hello world!"

    f.Close

    End Sub

    在C语言中,追加数据也比较简单,好像设定a+参数就可以了。

    今天,我要用MFC中的CStdioFile类进行文件操作,读写等。

    可是,看了下好像没有简单的方法,

    于是在网上看到这样的写法:

    CStdioFile file(strFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);

    file.WriteString(strTmp);

    file.Close;

    modeNoTruncate的意思就是不要截取的意思吧

    可是,试了下这段代码,并没有起作用,不知道是什么原因。

    于是,在WriteString写字符串之前加了个把指针先定位到文件末尾的代码,就可以了

    CString strTmp="hehe\r\n";

    CStdioFile file(strFile,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);

    file.SeekToEnd();//先定位到文件尾部

    file.WriteString(strTmp);

    file.Close;

    随着Windows 2000和XP的普及,现在的大文件越来越多,而VC6中MFC的CFile类只支持不大于4GB的文件, 原因在于CFile类中使用了32位整型来

    处理文件,32位数的范围是2的32次方(4GB),超过这个范围的文件CFile就管不了,微软.Net中VC7的CFile类支持大于4GB的文件,而.Net还不普

    及,开发桌面应用VC6还是首选,所以我们可以参照VC7写一个CFile的继承类CFile64,使它支持大于4GB的文件:

    class CFile64 : public CFile

    {

    public:

    // Attributes

    ULONGLONG GetPosition();

    // Overridables

    virtual ULONGLONG Seek(LONGLONG lOff, UINT nFrom);

    virtual void SetLength(ULONGLONG dwNewLen);

    ULONGLONG GetLength() ;

    virtual void LockRange(ULONGLONG dwPos, ULONGLONG dwCount);

    virtual void UnlockRange(ULONGLONG dwPos, ULONGLONG dwCount);

    };

    #include "stdafx.h"

    #include "file64.h"

    // CFile64 implementation

    ULONGLONG CFile64::Seek(LONGLONG lOff, UINT nFrom)

    {

    ASSERT_VALID(this);

    ASSERT((HANDLE)m_hFile != INVALID_HANDLE_VALUE);

    ASSERT(nFrom == begin || nFrom == end || nFrom == current);

    ASSERT(begin == FILE_BEGIN && end == FILE_END && current == FILE_CURRENT);

    LARGE_INTEGER liOff;

    liOff.QuadPart = lOff;

    liOff.LowPart = ::SetFilePointer((HANDLE)m_hFile, liOff.LowPart, &liOff.HighPart,

    (DWORD)nFrom);

    if (liOff.LowPart == (DWORD)-1)

    if (::GetLastError() != NO_ERROR)

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    return liOff.QuadPart;

    }

    ULONGLONG CFile64::GetPosition()

    {

    ASSERT_VALID(this);

    ASSERT((HANDLE)m_hFile != INVALID_HANDLE_VALUE);

    LARGE_INTEGER liPos;

    liPos.QuadPart = 0;

    liPos.LowPart = ::SetFilePointer((HANDLE)m_hFile, liPos.LowPart, &liPos.HighPart , FILE_CURRENT); if (liPos.LowPart == (DWORD)-1)

    if (::GetLastError() != NO_ERROR)

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    return liPos.QuadPart;

    }

    void CFile64::LockRange(ULONGLONG dwPos, ULONGLONG dwCount)

    {

    ASSERT_VALID(this);

    ASSERT((HANDLE)m_hFile != INVALID_HANDLE_VALUE);

    ULARGE_INTEGER liPos;

    ULARGE_INTEGER liCount;

    liPos.QuadPart = dwPos;

    liCount.QuadPart = dwCount;

    if (!::LockFile((HANDLE)m_hFile, liPos.LowPart, liPos.HighPart, liCount.LowPart,

    liCount.HighPart))

    {

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    }

    }

    void CFile64::UnlockRange(ULONGLONG dwPos, ULONGLONG dwCount)

    {

    ASSERT_VALID(this);

    ASSERT((HANDLE)m_hFile != INVALID_HANDLE_VALUE);

    ULARGE_INTEGER liPos;

    ULARGE_INTEGER liCount;

    liPos.QuadPart = dwPos;

    liCount.QuadPart = dwCount;

    if (!::UnlockFile((HANDLE)m_hFile, liPos.LowPart, liPos.HighPart, liCount.LowPart,

    liCount.HighPart))

    {

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    }

    }

    void CFile64::SetLength(ULONGLONG dwNewLen)

    {

    ASSERT_VALID(this);

    ASSERT((HANDLE)m_hFile != INVALID_HANDLE_VALUE);

    Seek(dwNewLen, (UINT)begin);

    if (!::SetEndOfFile((HANDLE)m_hFile))

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    }

    ULONGLONG CFile64::GetLength()

    {

    ASSERT_VALID(this);

    ULARGE_INTEGER liSize;

    liSize.LowPart = ::GetFileSize((HANDLE)m_hFile, &liSize.HighPart);

    if (liSize.LowPart == (DWORD)-1)

    if (::GetLastError() != NO_ERROR)

    CFileException::ThrowOsError((LONG)::GetLastError(), m_strFileName);

    return liSize.QuadPart;

    }

    /

    LONGLONG是64位整型,这样在理论上可支持的最大文件为18000000000GB,你也可以根据自己的需要重载CFile的其他函数

    展开全文
  • 出现这种问题的原因是VC6.0和其他软件冲突所致,网上一般认为是和Office2007或者Office2010冲突,有人说是和Office里的vosio冲突,但是经过检查发现卸载vosio之后问题依旧存在,也有人说是需要重装系统或者重新安装...

    在Win7操作系统下使用Visual C++ 6.0编程时,如果点击菜单中的【打开】或者【添加】,或者按快捷键,都会弹出下图的对话框,出现程序崩溃并退出的情况。

    image

    出现这种问题的原因是VC6.0和其他软件冲突所致,网上一般认为是和Office2007或者Office2010冲突,有人说是和Office里的vosio冲突,但是经过检查发现卸载vosio之后问题依旧存在,也有人说是需要重装系统或者重新安装软件,但是这些方法均不可行。


    其实这是微软的一个bug,微软官方对于这个问题给出了官方的解决方案(原文地址为http://support.microsoft.com/kb/241396/en-us)。根据官方给出的方法,我们要用一个专门的插件来修复这个bug。以下便是具体步骤:


    1、首先要下载所需的插件filetool.exe

    Microsoft微软官方的下载地址为http://download.microsoft.com/download/vc60ent/s1/6.0/w9xnt4/en-us/filetool.exe。下载得到一个.exe的自解压文件,双击或者右键解压,得到一个文件夹,里面包含filetool的项目文件,如下图。

    image

     

    2、编译生成 FileTool.dll文件

      找到FileTool.dsw文件(上图红色框中的文件),双击打开,进入Visual C++ 6.0之后,点击快捷菜单栏中的红色叹号进行编译,如果弹出创建文件的对话框,选【是】,

      弹出下图所示的调试对话框,直接点【取消】

    image

           

    这时编译完成,FileTool文件夹中多了一些文件,打开DeBug子文件夹,找到FileTool.dll文件,如下图,将此文件复制粘贴到C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\AddIns路径下,如果你安装软件时自定义了common文件夹的路径,则要找到你自定义的路径,将其放进去。

    image

     

    3、添加辅助工具

     放好FileTool.dll文件后,打开VC6软件,在【工具】(Tools)菜单中点击【定制…】(Customiz),找到【附加项和宏文件】(Add-Ins and Macro Files)选项卡,勾选其中的【File Tool Developer Studio Add-in】,(如果其中没有这一项,则可以点击浏览按钮,自己手动找到刚才得到的filetool.dll文件。)然后点【关闭】,如下图。

    image

    这时你就会发现界面上出现一个小的浮动工具条,里面有两个蓝色的按钮

    一个【A】和一个【O】,A是AddIn,O就是OpenFile命令。拖动这个浮动工具条,可以将其放到快捷菜单栏里

     

     现在就可以用这两个按钮来代替之前的打开和添加功能了,虽然有点难看,但也不至于崩溃。

     

    4、防止误点快捷键导致崩溃

    但是还有一个问题需要注意,原来的打开和添加菜单还有快捷键都还在,如果误点了这些按钮,程序依然会崩溃,为了防止意外发生,我们还需要清楚之前的打开和添加菜单以及快捷键,具体做法如下: 

           1.   首先删除菜单命令,首先打开【工具】(Tools)菜单,点击【定制…】(Customize),再单击【文件】菜单,将【打开】菜单拖出释放或者右键删除,  将快捷菜单栏中的打开按钮拖也拽出来释放,或者右键删除,

           2.单击【工程】菜单,将【添加到工程】拖出释放或者右键删除   

           3.打开【工具】→【定制】菜单,找到【命令】选项卡,在类别一栏中选择Add-ins,可以看到右边的按钮中有刚才加入的【添加到项目】和【打开文件】两个蓝色的按钮,如下图。

    image

     

        4. 单击文件菜单,将上图中的【打开文件】命令拖拽放到之前显示打开文件命令的位置

     

        5.  按照同样的方法将【添加到工程】命令拖拽到之前所在的位置

     

        6. 如果是绿色版,可以跳过这一怒

              如果不是绿色版,那么 接下来就要删除快捷键。
           6.1.打开【工具】(Tools)菜单,点击【定制…】(Customize),在弹出的对话框中选择【键盘】选项卡。在【类别】框中选择【文件】,【命令】框中选择【FileOpen】,【当前键】框中选择【Ctrl+O】,然后单击右边的【移去】按钮将其删除,       

           6.2.然后在【类别】框中选择【工程】,【命令】框中选择【InsertFilesIntoProject】,默认情况下右边的【当前键】框中没有快捷键,如果有,按照上述方法将其删除。在【类别】框中选择【Add-Ins】,【命令】框中选择【OpenFile】,在【安下心快捷键】框中用鼠标点一下,然后再键盘上按下【Ctrl】+【O】,点击右边的【分配】,新的快捷键就出现在【当前键】的框。

    如果要分配其他的快捷键,也可以使用上述这种方法。
    至此,问题已经完美解决。

     

    展开全文
  • 清理VC6.0项目在编译和链接时产生的中间文件。在备份项目时使用,可以节省硬盘空间,避免不必要的浪费。
  • VC.net为文件增加或删除文件权限 VC.net为文件增加或删除文件权限
  • 自动查找并删除VC生成的临时文件自动查找并删除VC生成的临时文件自动查找并删除VC生成的临时文件自动查找并删除VC生成的临时文件自动查找并删除VC生成的临时文件自动查找并删除VC生成的临时文件自动查找并删除VC生成...
  • VC6.0 INI文件的读取

    2009-05-22 16:07:22
    本程序在VC下实现了一个INI文件的读取,通常在网络编程中对于服务器的配置文件可以写入到INI文件中,以便使用
  • } /**************************************************************************** 删除文件或者文件夹,需要把路径添加2个\0\0 ****************************************************************************/ ...
  • 最贱发现我的工作电脑莫名其妙的磁盘就满了,排查之后发现是vscode生成的.BROWSE.VC.DB文件超大,其中一个.BROWSE.VC.DB文件竟然超过了45GB,正准备给vscode反馈问题寻求解决方案时,看到了某位开发小哥遇到了同样的...
  • VC+6的工程迁移到VS2010上

    千次阅读 2018-09-05 14:17:56
    VC+6的工程迁移到VS2010上 转载请注明出处 有时为了项目的需要,要将VC6++的工程迁移到VS2010上。由于编译环境的不同,会导致出现很多的错误,针对于这些报错,需要进行针对性修改。由于VC++Project的不同,...
  • vc6串口调试助手源码

    2021-05-20 03:41:53
    (如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了), 这时在ClassView视窗中就可以看到CMSComm类了,...
  • VC6 Release下,生成pdb文件

    千次阅读 2013-09-26 15:39:38
    1、Generate debug必须选上,否则没有调试信息   ...2、把优化disable,否则容易产生代码地址偏移;...3、用program database产生PDB文件...5、发布的版本,输出到一个固定目录,防止人为删除Debug, Relase导致丢失
  • 一些用户在操作电脑的时候,可能会碰到后缀名为.pdb的文件,该文件是程序数据库文件,相信很多用户对于PDB文件都不了解,下面小编将给大家科普下PDB文件知识,请大家耐心阅读下文。PDB是什么文件 PDB文件格式详解一...
  • 一、 剖析VC中的文件操作各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的...
  • VC MFC删除指定文件或文件夹内容

    万次阅读 2012-03-13 14:12:55
    1.删除指定文件 第一种方法:定义一个文件类对象来操作  CFile TempFile;   TempFile.Remove(指定文件名); 第二种方法: DeleteFile("c:\\abc\\test.exe ");//MFC框架中可直接调用...
  • 2.删除文件在回收站内,如果你不是用来删vc的工程,那就可能有错文件。用来别的,你要自己改下源码。 3.建议,每次完一个工程后,在回收站内先看看,是否有错文件。比如: 如果要的夹子是...
  • VC6.0打开或者添加工程文件崩溃的解决方法  很多学习编程的同学都遇到这样的问题,在Windows操作系统下使用Visual C++ 6.0编程时,如果点击菜单中的【打开】或者【添加】,或者按快捷键,都会弹出下图的对话框,...
  • Undelete文件恢复VC源代码

    热门讨论 2009-04-01 09:02:59
    文件删除后用来恢复的软件很多,但都是别人写的工具。本代码为你提供一个自己动手写工具的机会。这是VC60源代码,可全盘恢复NTFS磁盘文件,超级简单。
  • 批量删除VC,VS临时文件

    万次阅读 2012-11-29 13:14:50
    VC6.0及VS2008使用技巧》系列文章地址:http://blog.csdn.net/morewindows/article/category/863841 用VC6或VS2008编译工程...用VC6建立一个空的MFC单文档程序,编译后,所有文件会占用6.88MB。而实际有用的源文件,
  • 批量删除VC&VS中的临时文件方法

    千次阅读 2015-11-16 12:42:18
    批量删除VC&VS中的临时文件方法:写一个.bat的批处理文件,然后将这个批处理文件放在VC&VS的工程目录下,每次想删除VC&VS工程下的临时文件时,只要运行该批处理文件即可。 该批处理文件的写法如下: @echo off ...
  • 将MFC资源文件打包成dll项目中经常会遇到主程序的资源文件是在一个dll中,就是把资源文件部分任务提取出来,比如添加各种语言的字符串,各种图标,各种版本的Dlg或者Menu等等。改好之后,只需要build下就可以生成...
  • VC2010 调试时出现:无法启动程序 系统找不到指定文件。(如下图) 出现此情况是因为c语言中一个项目只能有一个主函数。可能一个项目创建两个源文件了。 删除另一个源文件即可正常调试。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,218
精华内容 25,287
关键字:

vc6删除文件