当前位置:首页 » 服务存储 » mfc存储文件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mfc存储文件

发布时间: 2023-04-17 09:29:57

A. 如何用mfc访问一个文件夹,并存储文件夹内所有文件的路径

CFileFind finder;
if(finder.IsDirectory() && !finder.IsDots())
{
// 是子文件夹,递归调用本函数
}
else
{
finder.GetFilePath(); // 获取文洞型件亏缺的完整路径
finder.GetFileName(); // 获纳空猜取文件名,包括扩展名
}

B. 帮我看看我的mfc程序保存文件用什么方法好

可以使用文档下的序列化方法。也可以自行使用CFile以二进制打开文件,以罩燃一定空间间隔存储数据。读取时,将数据保存到举租链表,写入时正闷兆,覆盖原来的文件。

C. MFC 指定文件夹保存文件且自动命名问题。

CFile savfile;
这个 CFile对象还没打开一个文件就拿来用了。
看下MSDN上CFile类的说明,创建CFile对象的时候要么用带参数的构造函数来打开一个文件,要么用 CFile::Open方法。
CFile::CFile

CFile( );
CFile(int hFile);
CFile(LPCTSTR
lpszFileName,UINT nOpenFlags);
throw(CFileException);

参数:
hFile 已打开的文件句柄。
lpszFileName 所需文件的路径字符串,此路径可为相对的也可为绝对的路径。
nOpenFlags 共享和访问模式,指定当打开文件时进行的动作,可以将以下所列用OR(|)操作符联起来。至少应有一个访问权限和一个共享选项,modeCreate和modeNoInherit是可选的。值如下所示:·
CFile::modeCreate
调用构造函数构造一个新文件,梁肆蔽如果文件已存在,则长度变成0。
·
CFile::modeNoTruncate
此值与modeCreate组合使用。如果所创建的文件已存在则其长度不变为0。因而此文件被打开,或者作为一个新文件或者作为一个已存橡州在的文件。这将是很有用的,例如当打开一个可能存在也可能不存在的文件时。这个选项也可用于CStdioFile.
·
CFile::modeRead
打开文件仅供读。
·
CFile::modeReadWrite
打开文件供读写。
·
CFile::modeWrite
打开文件仅供写。
·
CFile::modeNoInherit
阻止文件被子进程继承。
·
CFile::ShareDenyNone
不禁止其它进程读或写访问,打开文件。如果文件已被其它进程以兼容模式打开,则Create失败。
·
CFile::ShareDenyRead
打开文件,禁止其它进程读此文件。如果文件已被其它进程以兼容模式打开,或被其它进程读,则Create失败。
·
CFile::ShareDenyWrite
打开文件,禁止其它进程写此文件。如果文件已被其它进程以兼容模式打开,或被其它进程写,则Create失败。
·
CFile::ShareExclusive
以独占模式打开文件,禁止其它进程对文件的雹物读写。如果文件已经以其它模式打开读写(即使被当前进程),则构造失败。
·
CFile::ShareCompat
此标志在32位MFC中无效。此标志在使用CFile::Open时映射为CFile::ShareExclusive。
·
CFile::typeText
对回车换行设置特殊进程(仅用于派生类)。
·
CFile::typeBinary
设置二进制模式(仅用于派生类)。

说明:
缺省的构造函数不打开文件,而是将m_hFile设置为CFile::hFileNull。因为此构造函数不产生异常,故不使用TRY/CATCH逻辑操作。使用Open成员函数,然后直接测试异常状态。有关异常处理的策略,可参阅联机文档“Visual
C++程序员指南”中的“异常”。
带一个参数的构造函数构造一个CFile对象,对应于由hFile标识的操作系统文件。对访问模式或文件类型不作检查。当CFile对象被析构时,操作系统文件不会关闭,必须手工关闭它。
带两个参数的构造函数构造一个CFile对象,并打开给定路径的相对应的操作系统文件。构造函数将第一个构造函数和Open成员函数组合起来。当打开文件出错时产生一个异常。通常这说明这种错误不可解决,用户将被警告。

示例:
//
example for CFile::CFile
char* pFileName = "test.dat";
TRY
{
CFile
f(pFileName, CFile::modeCreate |
CFile::modeWrite);
}

CATCH(CFileException,e)
{
#ifdef
_DEBUG
afxDump<<"File could not be
opened"<<e->m_cause<<"\n";
#endif
}

END_CATCH

D. MFC的文件保存问题

这样顷谈就可橘运以了:
CFileDialog dlg(FALSE, ".xxx", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "文件格圆乎梁式1 (*.xxx)|*.xxx|文件格式2 (*.yyy)|*.yyy||");

if(dlg.DoModal() == IDOK)
{
CString szFileName = dlg.GetPathName();//文件名
CString ext = dlg.GetFileExt();//取得扩展名
ext.MakeLower();//转为小写

//判断文件类型
if(ext == "xxx")
{

}
else if(ext == "yyy")
{

}

//写保存代码
}

E. mfc存储txt文件溢出

当MFC存储一个TXT文件时,很容易出现溢出错误。因为MFC存羡芦罩储的文件有限制,所以容易出现溢出。

要解决这个问题,有几个方法可以尝试。

1. 使用流读取和写入文件:使用CFile类或其他文件操作类,可以将TXT文件的内容读取到流中,然后再将流的内容写入文件,以避免溢出错误。

2. 将文件中的每一行都存储到一个字符串数组中:可以使用CString类将文件中的每一行都存储到一个字哗余符串数组中,以便解决溢出错误,同时可以操作字符串数组,添加,删除等操作。

3. 使用存兄闹储过程:存储过程可以解决溢出的问题,但也需要大量的开发时间去实现。

F. MFC的怎么进行文件保存

用CFile,CArchive等都可以保存, 做一个按钮腊盯保存,另一个装入,即可。

或者在对话框退出时自动保存,在初始化时答扰自动装入。 无需按行保存,就用一个变量即可

例如:对话框开启时写:
BOOL CTest1Dlg::OnInitDialog()
{

//系统自动产生的代码省略。。。

// TODO: Add extra initialization here

CFile mFile;

if(mFile.Open("user.txt",CFile::modeRead))
{
CArchive ar(&mFile,CArchive::load);
ar>>m_Name>>m_Age;
ar.Close();
UpdateData(FALSE);
}

return TRUE;
}

退出时:
void CTest1Dlg::OnExit()
{
// TODO: Add your control notification handler code here

CFile mFile;

if(mFile.Open("user.txt",CFile::modeWrite|CFile::modeCreate))
{
CArchive ar(&mFile,CArchive::store);
UpdateData(TRUE);
ar<<m_Name<<m_Age;
ar.Close();
}
this->OnOK();
}

补充:微软基础类轮举和库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

G. MFC保存文件的问题!

都不知道你说的是什么问题尺键。。。
先建个单文档的对话框程序
CFileDlg是MFC封装好了的文件对话框类
CFileDlg
myDlg;
myDlg.DoModal(TRUE/FALSE);
true与FALSE表示要孙困升保存还是要打则老开
具体参看MSDN

H. mfc中怎么保存文件到txt文件中,并且文件格式为A1|A2|A3|A4&{另一组数据}

#include<嫌悔fstream>

ofstream outdata;
outdata.open("文件地址",ios::app);
outdata<<A1<<"|"<<A2<<"|"行者者<<A3<<"档薯|"<<A4<<endl;
如果你的A1A2A3A4是C++基本数据类型应该可以直接输出的吧

I. MFC中要如何保存和提取自己程序专用的数据文件

可以用windows api写入ini, 然后用windows api读取。
WritePrivateProfileStruc
GetPrivateProfileStruct
这两个很方便拿郑逗。

http://msdn.microsoft.com/en-us/library/ms725502(VS.85).aspx

用API写INI文件的函数有
BOOL WritePrivateProfileString(

LPCTSTR lpAppName, // 节名
LPCTSTR lpKeyName, // 键名
LPCTSTR lpString, // 添加的字符串
LPCTSTR lpFileName // Ini文件名
);

BOOL WritePrivateProfileStruct(
LPCTSTR lpszSection, // pointer to section name
LPCTSTR lpszKey, // pointer to key name
LPVOID lpStruct, // 要写入的数据缓冲区
UINT uSizeStruct, // 缓冲区的大小
LPCTSTR szFile // pointer to initialization filename
);
BOOL WritePrivateProfileSection(

LPCTSTR lpAppName, // pointer to string with section name
LPCTSTR lpString, // 写入的字符串
LPCTSTR lpFileName // pointer to string with filename
);
用消卖API读INI文件的函数有
DWORD GetPrivateProfileString(

LPCTSTR lpAppName, // points to section name
LPCTSTR lpKeyName, // points to key name
LPCTSTR lpDefault, // 默认字符串 ,如果没有则丛铅返回该值
LPTSTR lpReturnedString, // 返回的字符串
DWORD nSize, // 返回字符串的大小
LPCTSTR lpFileName // points to initialization filename
);
DWORD GetPrivateProfileSection(

LPCTSTR lpAppName, // address of section name
LPTSTR lpReturnedString, // address of return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // address of initialization filename
);
UINT GetPrivateProfileInt(

LPCTSTR lpAppName, // address of section name
LPCTSTR lpKeyName, // address of key name
INT nDefault, // return value if key name is not found
LPCTSTR lpFileName // address of initialization filename
);
BOOL GetPrivateProfileStruct(

LPCTSTR lpszSection, // address of section name
LPCTSTR lpszKey, // address of key name
LPVOID lpStruct, // address of return buffer
UINT uSizeStruct, // size of return buffer
LPCTSTR szFile // address of initialization filename
);
DWORD GetPrivateProfileSectionNames(

LPTSTR lpszReturnBuffer, // address of return buffer
DWORD nSize, // size of return buffer
LPCTSTR lpFileName // address of initialization filename
);
当然还有如WriteProfileString,WriteProfileSection,WriteProfileSturct, GetProfileString,GetProfileStruct,GetProfileSectionNames,GetProfileInt,GetProfileSection但这些只对Win.ini有效
下面我们来学习它们的用法
WritePrivateProfileString函数是向ini文件中写入字符串,如
WritePrivateProfileString(Pchar('类型'),Pchar('API'),Pchar('API 真好!'),Pchar('c:\example.ini'));
如果第二个参数是nil,那么该操作将删除该节
如果第三个参数为nil,那么该操作将删除该节中的所有键
如果在指定的文件中没有路径,那么它将在系统的目录寻找文件,如果不存在则建立

WritePrivateProfileSection是向文件中写入一整个键,其它键的格式为key = value,如
WritePrivateProfileSection(Pchar('类型'),Pchar('其它=123'),Pchar('c:\example.ini'));
注意,该操作将删除该节中的所有键后在进行本次的写入

WritePrivateProfileStruct是向文件中写入一个结构,如
type
TPerson = record
Name:string;
Age:integer;
end;
var
Per:TPerson;
WritePrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Per,Sizeof(Per),Pchar('C:\example.ini'));

GetPrivateProfileString是从文件中读出一个指定键的字符串,如果没有找到,则返回默认值
GetPrivateProfileString(Pchar(‘类型'),Pchar('API'),Pchar('no value'),Str1,21,Pchar('c:\example.ini'));

GetPrivateProfileSection是从文件中读出一整个键
GetprivateProfileSection('类型',str1,200,'c:\example.ini');

GetPrivateProfileInt是从文件中读出指定键的整型值,如果没找到或不是整型的值,则返回默认值,如果返回值小于0,则返回0,如
i:=GetPrivateProfileInt(Pchar('类型'),Pchar('整型'),i,Pchar('C:\example.ini'));
showMessage(inttostr(i));

GetPrivateProfileStruct从文件中读出指定键的结构值,如
type
TPerson = record
Name:string;
Age:integer;
end;
var
Buffer:TPerson;
GetPrivateProfileStruct(Pchar('类型'),Pchar('结构'),@Buffer,Sizeof(Per),Pchar('C:\example.ini'));

GetPrivateProfileSectionNames是从文件中读出所有节的名称,该函数返回读入缓冲区的字符数,如
count:=GetPrivateProfileSectionNames(Str3,200,Pchar('c:\example.ini'));
ShowMessage(Str3);
此处显示的只是第一个节的名称,如果要显示第二个字符的名称则要用到下面这句
showmessage(str3+5);
这句不用多解释吧?

J. MFC 保存文件路径问题

GetCurrentDirectory获取的是当前路径,并不是程序文件本身所在的路径,应用袜败程序的当前路径是可以通过SetCurrentDirectory来改变的,当你调用CFileDialog打开手好握文件以后,这个类就会调用SetCurrentDirectory来修改当前路径,所以你在保存时使用GetCurrentDirectory获取到的肯定是上次打开文件的那个路径,要想不改变当前路毕庆径,可以参考楼上兄弟的做法,但不推荐这样做,因为你下次打开文件的时候可能还是希望在上次打开的地方来打开,这本身是一种比较人性化的功能
如果你想获取程序本身所在的路径,可用API函数GetMoleFileName来获取,这个函数获取到的就是应用程序所在的路径,无论你是否确定当前路径是否会被改变,都建议不要用GetCurrentDirectory来获取应用程序的路径,因为不可预知会改变当前路径的因素太多了
要注意区分当前路径和应用程序所在路径,例如,你给程序创建一个快捷方式,快捷方式中的起始位置那一项设置的就是当前路径,与你目标程序的路径可以不一样;同样,在VC编译器里指定的工作路径也是当前路径,这个路径同样可以与你在命令里面设置的路径不一样,都是可以修改的