VC++檔案操作之最全篇
各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的程式碼,因而熟練的掌握檔案操作是十分重要的。本文將對Visual C++中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的分析。
1.檔案的查詢
當對一個檔案操作時,如果不知道該檔案是否存在,就要首先進行查詢。MFC中有一個專門用來進行檔案查詢的類CFileFind,使用它可以方便快捷地進行檔案的查詢。下面這段程式碼演示了這個類的最基本使用方法。
C++程式碼- CString strFileTitle;
- CFileFind finder;
- BOOL bWorking = finder.FindFile("C://windows//sysbkup//*.cab");
- while(bWorking)
- {
- bWorking=finder.FindNextFile();
- strFileTitle=finder.GetFileTitle();
- }
2.檔案的開啟/儲存對話方塊
讓使用者選擇檔案進行開啟和儲存操作時,就要用到檔案開啟/儲存對話方塊。MFC的類CFileDialog用於實現這種功能。使用CFileDialog 宣告一個物件時,第一個BOOL型引數用於指定檔案的開啟或儲存,當為TRUE時將構造一個檔案開啟對話方塊,為FALSE時構造一個檔案儲存對話方塊。
在構造CFileDialog物件時,如果在引數中指定了OFN_ALLOWMULTISELECT風格,則在此對話方塊中可以進行多選操作。此時要重點 注意為此CFileDialog物件的m_ofn.lpstrFile分配一塊記憶體,用於儲存多選操作所返回的所有檔案路徑名,如果不進行分配或分配的內 存過小就會導致操作失敗。下面這段程式演示了檔案開啟對話方塊的使用方法。
C++程式碼- CFileDialog mFileDlg(TRUE,NULL,NULL,
- OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
- "All Files (*.*)|*.*||",AfxGetMainWnd());
- CString str(" ",10000);
- mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);
- str.ReleaseBuffer();
- POSITION mPos=mFileDlg.GetStartPosition();
- CString pathName(" ",128);
- CFileStatus status;
- while(mPos!=NULL)
- {
- pathName=mFileDlg.GetNextPathName(mPos);
- CFile::GetStatus( pathName, status );
- }
3.檔案的讀寫
檔案的讀寫非常重要,下面將重點進行介紹。檔案讀寫的最普通的方法是直接使用CFile進行,如檔案的讀寫可以使用下面的方法:
C++程式碼- //對檔案進行讀操作
- char sRead[2];
- CFile mFile(_T("user.txt"),CFile::modeRead);
- if(mFile.GetLength()<2)
- return;
- mFile.Read(sRead,2);
- mFile.Close();
- //對檔案進行寫操作
- CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);
- mFile.Write(sRead,2);
- mFile.Flush();
- mFile.Close();
雖然這種方法最為基本,但是它的使用繁瑣,而且功能非常簡單。我向你推薦的是使用CArchive,它的使用方法簡單且功能十分強大。首先還是用 CFile宣告一個物件,然後用這個物件的指標做引數宣告一個CArchive物件,你就可以非常方便地儲存各種複雜的資料型別了。它的使用方法見下例。
C++程式碼- //對檔案進行寫操作
- CString strTemp;
- CFile mFile;
- mFile.Open("d://dd//try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);
- CArchive ar(&mFile,CArchive::store);
- ar<< ar.Close();
- mFile.Close();
- //對檔案進行讀操作
- CFile mFile;
- if(mFile.Open("d://dd//try.TRY",CFile::modeRead)==0)
- return;
- CArchive ar(&mFile,CArchive::load);
- ar>>strTemp;
- ar.Close();
- mFile.Close();
CArchive的 << 和>> 操作符用於簡單資料型別的讀寫,對於CObject派生類的物件的存取要使用ReadObject()和WriteObject()。使用 CArchive的ReadClass()和WriteClass()還可以進行類的讀寫,如:
C++程式碼- //儲存CAboutDlg類
- ar.WriteClass(RUNTIME_CLASS(CAboutDlg));
- //讀取CAboutDlg類
- CRuntimeClass* mRunClass=ar.ReadClass();
- //使用CAboutDlg類
- CObject* pObject=mRunClass->CreateObject();
- ((CDialog* )pObject)->DoModal();
雖然VC提供的文件/視結構中的文件也可進行這些操作,但是不容易理解、使用和管理,因此雖然很多VC入門的書上花費大量篇幅講述文件/視結構,但我建 議你最好不要使用它的文件。關於如何進行文件/視的分離有很多書介紹,包括非常著名的《Visual C++ 技術內幕》。
如果你要進行的檔案操作只是簡單的讀寫整行的字串,我建議你使用CStdioFile,用它來進行此類操作非常方便,如下例。
C++程式碼- CStdioFile mFile;
- CFileException mExcept;
- mFile.Open( "d://temp//aa.bat", CFile::modeWrite, &mExcept);
- CString string="I am a string.";
- mFile.WriteString(string);
- mFile.Close();
4.臨時檔案的使用
正規軟體經常用到臨時檔案,你經常可以會看到C:/Windows/Temp目錄下有大量的副檔名為tmp的檔案,這些就是程式執行是建立的臨時檔案。 臨時檔案的使用方法基本與常規檔案一樣,只是檔名應該呼叫函式GetTempFileName()獲得。它的第一個引數是建立此臨時檔案的路徑,第二個 引數是建立臨時檔名的字首,第四個引數用於得到建立的臨時檔名。得到此臨時檔名以後,你就可以用它來建立並操作檔案了,如:
C++程式碼- char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];
- GetTempPath(_MAX_PATH, szTempPath);
- GetTempFileName(szTempPath,_T ("my_"),0,szTempfile);
- CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);
- char m_char='a';
- m_tempFile.Write(&m_char,2);
- m_tempFile.Close();
5.檔案的複製、刪除等
MFC中沒有提供直接進行這些操作的功能,因而要使用SDK。SDK中的檔案相關函式常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它們的用法很簡單,可參考MSDN。
二、解讀VC++程式設計中的檔案操作API和CFile類
在VC程式設計中,操作檔案的方法主要有兩種:利用API函式和MFC的CFile類。微軟在其中封裝了檔案的一般操作,下面我就介紹一下如何利用這兩種方法實現檔案操作。
1.建立或開啟一個檔案
API函式CreateFile可開啟和建立檔案、管道、郵槽、通訊服務、裝置以及控制檯,但是在此時只是介紹用這個函式怎麼實現建立和開啟一個檔案。
C++程式碼- HANDLE CreateFile(
- LPCTSTR lpFileName, // 要開啟的檔名
- DWORD dwDesiredAccess, // 檔案的操作屬性
- DWORD dwShareMode, // 檔案共享屬性
- LPSECURITY_ATTRIBUTES lpSecurityAttributes,// 檔案安全特性
- DWORD dwCreationDisposition, //檔案操作
- DWORD dwFlagsAndAttributes, // 檔案屬性
- HANDLE hTemplateFile // 如果不為零,則指定一個檔案控制代碼。新檔案將從這個檔案中複製擴充套件屬性
- );
檔案的操作屬性:如果為零,表示只允許獲取與一個裝置有關的資訊,GENERIC_READ 表示允許對裝置進行讀訪問;如果為 GENERIC_WRITE 表示允許對裝置進行寫訪問(可組合使用);
檔案的共享屬性:零表示不共享; FILE_SHARE_READ 或 FILE_SHARE_WRITE 表示允許對檔案進行讀/寫共享訪問;
檔案的操作有:
·CREATE_NEW:建立檔案;如檔案存在則會出錯
·CREATE_ALWAYS:建立檔案,會改寫前一個檔案
·OPEN_EXISTING:檔案必須已經存在。由裝置提出要求
·OPEN_ALWAYS:如檔案不存在則建立它
·TRUNCATE_EXISTING:將現有檔案縮短為零長度
檔案屬性有:
·FILE_ATTRIBUTE_ARCHIVE:標記歸檔屬性
·FILE_ATTRIBUTE_COMPRESSED:將檔案標記為已壓縮,或者標記為檔案在目錄中的預設壓縮方式
·FILE_ATTRIBUTE_NORMAL:預設屬性
·FILE_ATTRIBUTE_HIDDEN:隱藏檔案或目錄
·FILE_ATTRIBUTE_READONLY:檔案為只讀
·FILE_ATTRIBUTE_SYSTEM:檔案為系統檔案
·FILE_FLAG_WRITE_THROUGH:作業系統不得推遲對檔案的寫操作
·FILE_FLAG_OVERLAPPED:允許對檔案進行重疊操作
·FILE_FLAG_NO_BUFFERING:禁止對檔案進行緩衝處理。檔案只能寫入磁碟卷的扇區塊
·FILE_FLAG_RANDOM_ACCESS:針對隨機訪問對檔案緩衝進行優化
·FILE_FLAG_SEQUENTIAL_SCAN:針對連續訪問對檔案緩衝進行優化
·FILE_FLAG_DELETE_ON_CLOSE:關閉了上一次開啟的控制代碼後,將檔案刪除。特別適合臨時檔案
可以組合的屬性有:FILE_FLAG_WRITE_THROUGH,FILE_FLAG_OVERLAPPED, FILE_FLAG_NO_BUFFERING,FILE_FLAG_RANDOM_ACCESS, FILE_FLAG_SEQUENTIAL_SCAN,FILE_FLAG_DELETE_ON_CLOSE, FILE_FLAG_BACKUP_SEMANTICS,FILE_FLAG_POSIX_SEMANTICS, FILE_FLAG_OPEN_REPARSE_POINT,FILE_FLAG_OPEN_NO_RECALL
如果成功返回一個打 開檔案得控制代碼,如果呼叫函式之前檔案存在,檔案操作屬性為:CREATE_ALWAYS 或 OPEN_ALWAYS,使用GetLastError函式返回的是ERROR_ALREADY_EXISTS(包括函式操作成功),如果之前函式不存 在,則返回0。使用失敗返回INVALID_HANDLE_VALUE,要取得更多的資訊,使用GetLastError函式。
檔案關閉用:
BOOL CloseHandle(HANDLE hObject // handle to object to close);
例子1、在當前目錄下面建立一個檔案:
C++程式碼- HANDLE handle;
- DWORD Num;
- handle= ::CreateFile("new.tmp",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,
- FILE_FLAG_DELETE_ON_CLOSE,NULL);
- if(INVALID_HANDLE_VALUE!= handle )
- {
- ::SetFilePointer(handle,0,0,FILE_BEGIN);
- char Buffer[] = "這是個剛建立的檔案";
- ::WriteFile(handle,Buffer,sizeof(Buffer),&Num,NULL);
- ZeroMemory(Buffer,sizeof(Buffer));
- ::SetFilePointer(handle,0,0,FILE_BEGIN);
- ::ReadFile(handle,Buffer,sizeof(Buffer),&Num,NULL);
- MessageBox(Buffer);
- ::CloseHandle(handle);
- }
可以改變上面的建立檔案的屬性和操作看下不同效果。
CFile建立和開啟一個檔案:
建立檔案和開啟檔案的方法有很多種,下面簡單介紹下幾個建構函式:
CFile( LPCTSTR lpszFileName, UINT nOpenFlags );
throw( CFileException );
CFile( );
BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );
lpszFileName:檔名稱,可以是相對路徑,絕對路徑或網路路徑
nOpenFlags:開啟方式有:
·CFile::modeCreate 呼叫建構函式構造一個新檔案,如果檔案已存在,則長度變成0。
·CFile::modeNoTruncate 此值與modeCreate組合使用。如果所建立的檔案已存在則其長度不變為0。因而此檔案被開啟,或者作為一個新檔案或者作為一個已存在的檔案。這將是很有用的,例如當開啟一個可能存在也可能不存在的檔案時。
·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 設定二進位制模式(僅用於派生類)。
下面給出MSDN中的一個例子:
C++程式碼- 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
- CFile fileTest;
- char* pFileName = "test.dat";
- TRY
- {
- fileTest.Open(pFileName, CFile::modeCreate |CFile::modeWrite);
- }
- CATCH_ALL(e)
- {
- fileTest.Abort( );
- THROW_LAST ( );
- }
- END_CATCH_ALL
2.檔案的讀寫定位
定位檔案中的資料是很重要的,這決定了寫入的資料在檔案中的位置。API函式
C++程式碼- DWORD SetFilePointer(
- HANDLE hFile, //檔案的控制代碼
- LONG lDistanceToMove, //位元組偏移量r
- PLONG lpDistanceToMoveHigh, //指定一個長整數變數,其中包含了要使用的一個高雙字偏移(一般用來操作大型檔案)。可設為零,表示只使用lDistanceToMove
- DWORD dwMoveMethod //檔案定位
- );
dwMoveMethod檔案定位的方式有三種:
·FILE_BEGIN:從檔案開始處。
·FILE_CURRENT:從當前位置。
·FILE_END:從檔案的末尾。
此函式可以用來定位大型檔案,lpDistanceToMoveHigh是高32位,lDistanceToMove是低32位。如果 lpDistanceToMoveHigh為NULL時,函式操作成功,返回的是當前檔案資料的偏移量,如果lpDistanceToMoveHigh不 NULL,則返回資料的偏移量高32位放在 lpDistanceToMoveHigh中,函式呼叫失敗返回的是0xffffffff.
BOOL SetEndOfFile(HANDLE hFile //檔案的控制代碼);
CFile類的檔案資料定位函式有:
LONG Seek(LONG lOff,UINT nFrom);
throw(CFileException);
如果要求的位置合法,則Seek返回從檔案開始起的新位元組偏移量
lOff:指標移動的位元組數。
nFrom:指標移動的模式。可以是CFile::begin,CFile::current,CFile::end
void SeekToBegin( );
DWORD SeekToEnd( );//返回檔案長度(位元組數)。
下面是一個讀取點陣圖檔案的資訊的例子:
C++程式碼- CFile file;
- BITMAPINFOHEADER bmpinfo;
- try
- {
- file.Open("D://ToolBar.bmp",CFile::modeRead);
- file.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
- file.Read(&bmpinfo,sizeof(BITMAPINFOHEADER ));
- CString str;
- str.Format("點陣圖檔案的長是%d,高%d",bmpinfo.biWidth,bmpinfo.biHeight);
- MessageBox(str);
- file.Close();
- }
- catch(CFileException *e)
- {
- CString str;
- str.Format("讀取資料失敗的原因是:%d",e->m_cause);
- MessageBox("str");
- file.Abort();
- e->Delete();
- }
讀取資料:
C++程式碼- BOOL ReadFile(
- HANDLE hFile, //檔案的控制代碼
- LPVOID lpBuffer, //用於儲存讀入資料的一個緩衝區
- DWORD nNumberOfBytesToRead, //要讀入的字元數
- LPDWORD lpNumberOfBytesRead, //從檔案中實際讀入的字元數
- LPOVERLAPPED lpOverlapped //如檔案開啟時指定了FILE_FLAG_OVERLAPPED,那麼必須,用這個引數引用一個特殊的結構。該結構定義了一次非同步讀取操作。否則,應將這個引數設為NULL
- );
CFile的成員函式有:
UINT Read (void* lpBuf,UINT nCount);
throw(CFileException);// 返回值是傳輸到緩衝區的位元組數。
寫入資料:
C++程式碼- BOOL WriteFile(
- HANDLE hFile, //檔案的控制代碼
- LPCVOID lpBuffer, //要寫入的一個數據緩衝區
- DWORD nNumberOfBytesToWrite, //要寫入資料的位元組數量。如寫入零位元組,表示什麼都不寫入,但會更新檔案的"上一次修改時間"。
- LPDWORD lpNumberOfBytesWritten, //實際寫入檔案的位元組數量
- LPOVERLAPPED lpOverlapped // OVERLAPPED,倘若在指FILE_FLAG_OVERLAPPED的前提下開啟檔案,這個引數就必須引用一個特殊的結構。該結構定義了一次非同步寫操作。否則,該引數應置為NULL
- );
void Write(const void* lpBuf,UINT nCount);
throw (CFileException);
lpBuf:指向使用者提供的緩衝區,包含將寫入檔案中的資料
nCount:從緩衝區內傳輸的位元組數。對文字模式的檔案,回車換行作為一個字元。
下面是象一個檔案中寫入資料的例子:
C++程式碼- CFile file;
- try
- {
- file.Open("d:/my.dat",CFile::modeCreate|CFile::modeWrite);
- file.SeekToBegin();
- char Data[] = "111111111/n1111111111";
- file.Write(Data,sizeof(Data));
- file.Flush();
- file.Close();
- }
- catch(CFileException *e)
- {
- CString str;
- str.Format("讀取資料失敗的原因是:%d",e->m_cause);
- MessageBox("str");
- file.Abort();
- e->Delete();
- }
3.取得和設定檔案的建立時間、最後訪問時間、最後寫時間
C++程式碼- BOOL GetFileTime(
- HANDLE hFile, // 檔案控制代碼
- LPFILETIME lpCreationTime, // 建立時間
- LPFILETIME lpLastAccessTime, // 最後訪問時間
- LPFILETIME lpLastWriteTime // 最後寫時間
- );
- BOOL SetFileTime(
- HANDLE hFile,
- CONST FILETIME *lpCreationTime,
-
相關推薦
VC++檔案操作之最全篇
各種關於檔案的操作在程式設計中是十分常見,如果能對其各種操作都瞭如指掌,就可以根據實際情況找到最佳的解決方案,從而在較短的時間內編寫出高效的程式碼,因而熟練的掌握檔案操作是十分重要的。本文將對Visual C++中有關檔案操作進行全面的介紹,並對在檔案操作中經常遇到的一些疑難問題進行詳細的
Android初試--Android中的檔案操作之SDcard操作(2)
SDCARD:通俗的說,就像外接硬碟。 在模擬器中使用SDCard,你需要先建立一張SDCard卡(當然不是真的SDCard,只是映象檔案)。建立SDCard可以在Eclipse建立模擬器時隨同建立,也可以使用DOS命令進行建立,在DOS視窗中進入android SDK安裝路徑的tools
Android初試--Android中的檔案操作之ROM操作(1)
RAM(Random Access Memory)隨機儲存器,在手機中稱為執行記憶體。通俗的說,就像電腦的記憶體。在斷電以後儲存在上面的資料會自動消失。 ROM(Read-Only Memory)只讀儲存器,存放手機韌體程式碼的儲存器,比如手機的作業系統、一些應用程式如遊戲等。通俗的說,就
VS2017檔案操作之使用fopen函式總結
fopen中mode引數 r, w, a, r+, w+, a+ 具體區別 r : 只能讀, 必須存在, 可在任意位置讀取 w : 只能寫, 可以不存在, 必會擦掉原有內容從頭寫 a : 只能寫, 可以不存在, 必不能修改原有內容, 只能在結尾追加寫, 檔案指標無效 r+ : 可讀可
fortran檔案操作之'append'; 'backspace'; 'endfile';
本次內容將講一下檔案操作的“高階技巧!” 例如我要讀取檔案的最後一行資料,一般來說可以直接將前n-1行read過去,再進行讀取 本文將介紹一種新的方法,程式碼如下 program main implicit none integer :: a op
C語言檔案操作之fgets()
C語言檔案操作之fgets() 原創 2013年01月25日 11:57:00 標籤: C語言 / fgets... / 檔案操作函式 142460 &
Linux C高階程式設計——檔案操作之庫函式
Linux C高階程式設計——檔案操作之庫函式 宗旨:技術的學習是有限的,分享的精神是無限的 ——為什麼要設計標準I/O庫? 直接使用API進行檔案訪問時,需要考慮許多細節問題 例如:read、write時,緩衝區的大小該如何確定,才能使效率最優 標準I/O庫封裝了諸多
Linux C高階程式設計——檔案操作之系統呼叫
Linux C高階程式設計檔案操作之系統呼叫 宗旨:技術的學習是有限的,分享的精神是無限的! 庫函式是一些完成特定功能的函式,一般由某個標準組織製作釋出,並形成一定的標準。使用庫函式編寫的函式一般可以應用於不同的平臺而不需要做任何修改,具有很好的可移植
C語言檔案操作之----檔案的讀寫
當檔案按指定的工作方式開啟以後,就可以執行對檔案的讀和寫。下面按檔案的性質分類進行操作。針對文字檔案和二進位制檔案的不同性質,對文字檔案來說,可按字元讀寫或按字串讀寫;對二進位制檔案來說,可進行成塊的讀寫或格式化的讀寫。1. 讀寫字元 C提供fgetc和fputc函式對文字檔案進行字元的讀寫,其函式的原
c檔案操作之位置指標設定函式fseek
fseek 原型:int fseek(FILE *stream, long offset, int fromwhere); 功能:重定位流(資料流/檔案)上的檔案內部位置指標 注意:不是定位檔案指標(
python天天進步(2)--檔案操作之遍歷目錄
Python的os模組,包含了普遍的作業系統功能,這裡主要學習與路徑相關的函式: os.listdir(dirname):列出dirname下的目錄和檔案 os.getcwd():獲得當前工作目錄 os.curdir:返回當前目錄('.') os.chdir(dirname
檔案操作之:fstat、stat和lstat 區別
stat系統呼叫系列包括了fstat、stat和lstat,它們都是用來返回“相關檔案狀態資訊”的,三者的不同之處在於設定原始檔的方式不同。 1 首先隆重介紹的是一個非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一個結構體型別,名字叫做struct stat。可以說,沒有
Node.js本地檔案操作之檔案拷貝與目錄遍歷的方法
檔案拷貝NodeJS 提供了基本的檔案操作 API,但是像檔案拷貝這種高階功能就沒有提供,因此我們先拿檔案拷貝程式練手。與 copy 命令類似,我們的程式需要能接受原始檔路徑與目標檔案路徑兩個引數。 小檔案拷貝我們使用 NodeJS 內建的 fs 模組簡單實現這個程式如下。
Qt檔案操作之——QFileDialog儲存檔案
QFileDialog m_QFileDialog; //!-- 得到原檔案的字尾名 QString suffix_save = QFileInfo(FilePathName).suffix(); //!--- 設定過濾匹配檔案格式
java 檔案操作之刪除
刪除某個目錄:當然 目錄下的所有子目錄和檔案都要求被刪除 要點:File.delete()用於刪除“某個檔案或者空目錄”! jdk文件: Deletes the file or directory denoted by this abstract pathname. If
C/C++ 檔案操作之CreateFile、ReadFile和WriteFile
1. CreateFile 這個函式的功能是建立或者開啟一個檔案或者I/O裝置,通常使用的I/O形式有檔案、檔案流、目錄、物理磁碟、卷、終端流等。如執行成功,則返回檔案控制代碼。 INVALID_HANDLE_VALUE 表示出錯,會設定 GetLastE
python--檔案操作之遍歷目錄
import os,sysdef listdir(dir,file): file.write(dir + '\n') fielnum = 0 list = os.listdir(dir) #列出目錄下的所有檔案和目錄 for line in list: fil
python天天進步(3)--檔案操作之遍歷目錄
Python天天進步--檔案操作之遍歷目錄 Python的os模組,包含了普遍的作業系統功能,這裡主要學習與路徑相關的函式: os.listdir(dirname):列出dirname下的目錄和檔案 os.getcwd():獲得當前工作目錄 os.curdir:返回當前目錄('.') os.chdir(dir
java檔案操作 之 建立資料夾路徑和新檔案
一:問題 (1)java 的如果資料夾路徑不存在,先建立; (2)如果檔名 的檔案不存在,先建立再讀寫;存在的話直接追加寫,關鍵字true表示追加 (3)File myPath = new File(toFilePath); if ( !myPath.exists())
js檔案操作之——匯出Excel (js-xlsx)
1. 最簡單的Excel匯出 原理:js可以通過base64或者blob,把一個包含一個<table>的<html>串,匯出成xx.xls格式。而Excel可以開啟html檔案。這樣看起來,就是一個成功的Excel匯出。 var tab