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的安裝位置