1. 程式人生 > >C/C++ Windows API——檔案/資料夾建立、刪除、移動及檢視時間

C/C++ Windows API——檔案/資料夾建立、刪除、移動及檢視時間

// FileOperationDemo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>

int main()
{
    BOOL ret;
    LPCWSTR filePath1 = _T("C:\\Users\\Administrator\\Desktop\\file_demo_test1.txt");
    LPCWSTR filePath2 = _T("C:\\Users\\Administrator\\Desktop\\file_demo_test2.txt"
); LPCWSTR dirPath1 = _T("C:\\Users\\Administrator\\Desktop\\dir_demo_test1"); LPCWSTR dirPath2 = _T("C:\\Users\\Administrator\\Desktop\\dir_demo_test2"); /* 建立檔案 HANDLE CreateFile( LPCTSTR lpFileName, //指向檔名的指標 DWORD dwDesiredAccess, //訪問模式(寫/讀), 如果為 GENERIC_READ 表示允許對裝置進行讀訪問;如果為 GENERIC_WRITE 表示允許對裝置進行寫訪問(可組合使用);如果為零,表示只允許獲取與一個裝置有關的資訊 DWORD dwShareMode, //
共享模式, 0表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允許對檔案進行共享訪問 LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向一個SECURITY_ATTRIBUTES安全屬性結構的指標,定義了檔案的安全特性(如果作業系統支援的話),預設為0 DWORD dwCreationDisposition, //如何建立 DWORD dwFlagsAndAttributes, //檔案屬性 HANDLE hTemplateFile //用於複製檔案控制代碼, 如果不為零,則指定一個檔案控制代碼。新檔案將從這個檔案中複製擴充套件屬性 ); dwDesiredAccess Long,下述常數之一: #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
FILE_READ_DATA |\ FILE_READ_ATTRIBUTES |\ FILE_READ_EA |\ SYNCHRONIZE) #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ FILE_WRITE_DATA |\ FILE_WRITE_ATTRIBUTES |\ FILE_WRITE_EA |\ FILE_APPEND_DATA |\ SYNCHRONIZE) #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ FILE_READ_ATTRIBUTES |\ FILE_EXECUTE |\ SYNCHRONIZE) dwCreationDisposition Long,下述常數之一: CREATE_NEW 建立檔案;如檔案存在則會出錯 CREATE_ALWAYS 建立檔案,會改寫前一個檔案 OPEN_EXISTING 檔案必須已經存在。由裝置提出要求 OPEN_ALWAYS 如檔案不存在則建立它 TRUNCATE_EXISTING 將現有檔案縮短為零長度 dwShareMode Long,下述常數之一: #define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_WRITE 0x00000002 #define FILE_SHARE_DELETE 0x00000004 dwFlagsAndAttributes Long, 一個或多個下述常數 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 關閉了上一次開啟的控制代碼後,將檔案刪除。特別適合臨時檔案 */ DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE; DWORD dwShareMode = 0; LPSECURITY_ATTRIBUTES lpSecurityAttributes = 0; DWORD dwCreationDisposition = CREATE_NEW; DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL; HANDLE hTemplateFile = 0; HANDLE handle = CreateFile(filePath1, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); printf("CreateFile -> HANDLE=0x%x\n", (unsigned int)handle); if (handle != INVALID_HANDLE_VALUE) { FILETIME fCreationTime, fLastAccessTime, fLastWriteTime; // GetFileTime函式用來獲得一個檔案或目錄的建立的時間、最後訪問的時間以及最後修改的時間 ret = GetFileTime(handle, &fCreationTime, &fLastAccessTime, &fLastWriteTime); if (ret == 0) { printf("GetFileTime fail(%d)\n", GetLastError()); } else { printf("GetFileTime -> %d\n", ret); } /* 根據一個FILETIME結構的內容,裝載一個SYSTEMTIME結構。 WINBASEAPI _Success_(return != FALSE) BOOL WINAPI FileTimeToSystemTime( _In_ CONST FILETIME * lpFileTime, _Out_ LPSYSTEMTIME lpSystemTime ); */ SYSTEMTIME sysCreationTime, sysLastAccessTime, sysLastWriteTime; ret = FileTimeToSystemTime(&fCreationTime, &sysCreationTime); if (ret == 0) { printf("FileTimeToSystemTime creationTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime creationTime -> %d\n", ret); printf("%4d%2d%2d日,%2d:%2d:%2d\n", sysCreationTime.wYear, sysCreationTime.wMonth, sysCreationTime.wDay, sysCreationTime.wHour, sysCreationTime.wMinute, sysCreationTime.wSecond); } ret = FileTimeToSystemTime(&fLastAccessTime, &sysLastAccessTime); if (ret == 0) { printf("FileTimeToSystemTime lastAccessTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime lastAccessTime -> %d\n", ret); printf("%4d%2d%2d日,%2d:%2d:%2d\n", sysLastAccessTime.wYear, sysLastAccessTime.wMonth, sysLastAccessTime.wDay, sysLastAccessTime.wHour, sysLastAccessTime.wMinute, sysLastAccessTime.wSecond); } ret = FileTimeToSystemTime(&fLastWriteTime, &sysLastWriteTime); if (ret == 0) { printf("FileTimeToSystemTime lastWriteTime fail(%d)\n", GetLastError()); } else { printf("FileTimeToSystemTime lastWriteTime -> %d\n", ret); printf("%4d%2d%2d日,%2d:%2d:%2d\n", sysLastWriteTime.wYear, sysLastWriteTime.wMonth, sysLastWriteTime.wDay, sysLastWriteTime.wHour, sysLastWriteTime.wMinute, sysLastWriteTime.wSecond); } //用完要記得關閉,否則其他操作會失敗,GetLastError()=32 => 程序無法訪問檔案,因為另一個程式正在使用此檔案。 CloseHandle(handle); } /* 複製檔案 BOOL WINAPI CopyFile( _In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName, _In_ BOOL bFailIfExists ); return 失敗返回0,成功返回非0*/ ret = CopyFile(filePath1, filePath2, true); if (ret == 0) { printf("CopyFile fail(%d)\n", GetLastError()); } else { printf("CopyFile -> %d\n", ret); } /* 刪除檔案 BOOL DeleteFile( LPCSTRlpFileName//要刪除的檔名的指標 ); return 失敗返回0,成功返回非0。如果程式嘗試刪除一個不存在的檔案。GetLastError返回ERROR_FILE_NOT_FOUND。如果檔案是隻讀 的,則GetLastError返回ERROR_ACCESS_DENIED */ ret = DeleteFile(filePath1); if (ret == 0) { printf("DeleteFile fail(%d)\n", GetLastError()); } else { printf("DeleteFile -> %d\n", ret); } /* 移動一個存在的檔案或者目錄(包括子目錄) WINBASEAPI BOOL WINAPI MoveFileW( _In_ LPCWSTR lpExistingFileName, _In_ LPCWSTR lpNewFileName ); return 失敗返回0,成功返回非0*/ ret = MoveFile(filePath2, filePath1); if (ret == 0) { printf("MoveFile fail(%d)\n", GetLastError()); } else { printf("MoveFile -> %d\n", ret); } /* WINBASEAPI DWORD WINAPI GetFileAttributesW( _In_ LPCWSTR lpFileName ); #define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 #define FILE_ATTRIBUTE_EA 0x00040000 */ DWORD attr = GetFileAttributes(filePath1); if (attr == INVALID_FILE_ATTRIBUTES) { printf("GetFileAttributes fail(%d)", GetLastError()); } else { printf("GetFileAttributes -> 0x%x\n", attr); } DeleteFile(filePath1); /* 建立資料夾(注意: 目錄沒有複製操作) WINBASEAPI BOOL WINAPI CreateDirectoryW( _In_ LPCWSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes ); return 失敗返回0,成功返回非0。 */ ret = CreateDirectory(dirPath1, 0); if (ret == 0) { printf("CreateDirectory fail(%d)\n", GetLastError()); } else { printf("CreateDirectory -> %d\n", ret); } /* 刪除目錄(注意:目錄必須為空,否則會報145錯誤) WINBASEAPI BOOL WINAPI RemoveDirectoryW( _In_ LPCWSTR lpPathName ); */ ret = RemoveDirectory(dirPath1); if (ret == 0) { printf("RemoveDirectory fail(%d)\n", GetLastError()); } else { printf("RemoveDirectory -> %d\n", ret); } system("pause"); return 0; }

這裡寫圖片描述

相關推薦

C/C++ Windows API——檔案/資料建立刪除移動檢視時間

// FileOperationDemo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <Windows.h>

[C#學習筆記]判斷檔案資料是否存在

判斷檔案或者資料夾是否存在    首先,檔案File,資料夾Directory,需要引用System.IO using System.IO;    定義一個需要判斷的檔案的地址 string fi

FILE資料建立刪除檔案讀取

1.資料夾操作 //新建資料夾目錄 public static void newFolder(String folderPath)  {   String filePath = folderPath.toString();      java.io.File myFilePa

C# 選擇檔案選擇資料開啟檔案(或者資料) 路徑中獲取檔案全路徑目錄副檔名檔名稱 追加拷貝刪除移動檔案建立目錄 修改檔名資料名!!

https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;/

C# 檔案操作(全部) 追加拷貝刪除移動檔案建立目錄 修改檔名資料

    本文也收集了目前最為常用的C#經典操作檔案的方法,具體內容如下:C#追加、拷貝、刪除、移動檔案、建立目錄、遞迴刪除資料夾及檔案、指定資料夾下面的所有內容copy到目標資料夾下面、指定資料夾下面的所有內容Detele、讀取文字檔案、獲取檔案列表、讀取日誌檔案

C# -- 使用遞迴列出資料目錄目錄下的檔案

使用遞迴列出資料夾目錄及目錄的下檔案 1.使用遞迴列出資料夾目錄及目錄下檔案,並將檔案目錄結構在TreeView控制元件中顯示出來。 新建一個WinForm應用程式,放置一個TreeView控制元件:   程式碼實現:在Form_load的時候,呼叫遞迴方法載入檔案目錄結構在TreeVi

C#遍歷得到指定資料下的所有檔案

string path = Application.StartupPath + "\\data\\採集資料\\"; DirectoryInfo root = new DirectoryInfo(path); foreach (FileInfo f in root.GetFiles())//遍歷資料夾

C#中遍歷指定資料下的檔案或子檔案

今天用到查詢給定路徑下的所有檔案,記錄一下: 1、引入IO名稱空間 using System.IO; 2、用到的主要方法: DirectoryInfo folder = new DirectoryInfo(filePath); DirectoryInfo.GetFiles():獲取目錄中所有

Windows】Win10-更改c盤下的使用者資料

轉載ooooohugh的文章,原文地址:https://blog.csdn.net/qq_33530388/article/details/71739845 當初 不小心用自己名字 作為計算機使用者名稱,後來 許多軟體因為 不支援 路徑中有中文,導致吃了不少的虧,心疼。。。。 下面說下怎

C#:開啟 檔案/資料選擇框,選取,並獲得路徑名稱

using System; using System.Windows.Forms; //選取檔案,並獲得路徑 private void button1_Click(object sender, EventArgs e) { var f = n

C#向其它電腦共享資料上傳下載檔案

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; us

Windows下對資料下所有圖片批量重新命名(附C++,python,matlab程式碼)

原資料夾 重新命名之後 C++ #include <iostream> #include <io.h> //對系統檔案進行操作的標頭檔案 #include <string> #include

C#獲取ftp上的資料檔案目錄

C#連線ftp是比較麻煩的,特別是讀資料的時候 這裡是一行一行讀的。 資料夾和檔案差異就一行,直接貼 /// <summary> /// 獲取當前目錄下資料夾 /// </summary> ///

C/C++】資料的開啟遍歷刪除建立關閉操作彙總

轉自:http://sodino.com/2015/03/09/c-directory-io/ 需要用到的標頭檔案為:#include <sys/types.h>#include <dirent.h> 開啟資料夾 DIR *opendir(

C++遞迴遍歷資料(三)——建立樹結構

補充上篇部落格:遞迴遍歷資料夾時,同步在記憶體中建立相同的樹狀結構,用來描述所有檔案和資料夾的儲存結構。 具體實現如下: // recursion3.cpp #include <vect

C# FTP釋出檔案/資料至伺服器(增刪改查)

C#使用FTP釋出檔案或資料夾 一、選擇一個已有的ftp站點,要求已知登入資訊。如果沒有,則本地新增ftp站點,具體新增ftp站點的教程如下,百度上有很多類似教程: https://jingyan.baidu.com/article/dca1fa6f4794

如何壓縮多個檔案/資料(GZipStream and C#)

publicclass GZip     {         ///<summary>/// Compress         ///</summary>///<param name="lpSourceFolder">The location of the f

C++ 指定路徑資料存在與否查詢資料建立

在MFC環境下 CString folder=L"H:\\h264視訊"; //存資料夾路徑 CFileFind finder; //在mfc中有這樣一個類叫做CFileFind, if (

用Visual C#呼叫Windows API函式

用Visual C#呼叫Windows API函式         Api函式是構築Windws應用程式的基石,每一種Windows應用程式開發工具,它提供的底層函式都間接或直接地呼叫了Windows API函式,同時為了實現功能擴充套

Python實現Windows和Linux之間互相傳輸檔案(資料)的方法

   專案中需要從Windows系統傳輸ISO檔案到Linux測試系統,然後再Linux測試系統裡安裝這個ISO檔案。所以就需要實現如何把檔案從Windows系統傳輸到Linux系統中。 在專案中使用了pscp.exe這個工具,只要按照pscp.exe的使用說明操作即可。只要進入pscp.exe的安裝位置