當前位置:首頁 » 服務存儲 » 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編譯器里指定的工作路徑也是當前路徑,這個路徑同樣可以與你在命令裡面設置的路徑不一樣,都是可以修改的