Linux C 實現檔案複製 檔案及資料夾刪除功能

2021-09-29 21:58:59 字數 3166 閱讀 9530

linux下的檔案操作其實是個很普通的小功能,linux c提供了一些系統函式可以呼叫,我們使用的時候只需按照自己的需要封裝一下即可。

實現檔案從乙個目錄複製到另外乙個目錄,以下是最簡單的操作,正式的工程中為了嚴謹起見,盡量加上錯誤檢查。

#include #include //#include #include #include #include #include #include char buff[1024];

int len;

const int buf_len = 1024;

int file_copy(const char *src_file, const char *dest_file)

/* 關閉檔案控制代碼 */

close(fd_src);

close(fd_dest);

return 0;

}int main(int argc, char const *ar**)

直接看乙個程式吧,在乙個給定的主路徑下,通過當前時間建立子路徑,再在子路徑下寫入幾個檔案,一段時間後(程式中是10秒),再將子路徑及其下面的檔案全部刪除。

/* 用時間命名輸出檔案,精確到毫秒 */

string get_output_image_filename(string output_dir)

/* 給定主儲存路徑,獲取以時間命名的下級路徑 */

string get_output_image_subdir(string main_dir)

return full_sub_dir; }

/* 給定路徑和檔名,獲取檔案的全路徑名稱 */

string get_file_path(const char* input_path, char* single_file_name)

/* make a full file path, like this: /home/outputfile/file1.txt */

strcat(full_file_path, single_file_name);

printf("the full file path is: %s \n", full_file_path);

return (string)full_file_path; }

/* 通過遞迴的方式刪除某個路徑下的所有檔案,並刪除該路徑 */

bool delete_file(string file_path)

else if(s_isdir(buf.st_mode)) // check if it is a directory

/* remove sub directories recursively */

while((dirinfo = readdir(dir)) != null)

/* 對函式自身進行遞迴呼叫 */

delete_file(fullfilepath.c_str());

rmdir(fullfilepath.c_str());

printf("delete file path: %s \n", fullfilepath.c_str());

} closedir(dir);

/* 最後刪除主路徑 */

rmdir(file_path.c_str()); }

return true; }

/* test for image writing */

int main()

/* 獲取子路徑 */

string sub_dir = get_output_image_subdir(image_path);

string full_img_name;

int i = 0;

/* 將乙個檔案在建立的子路徑下寫入5次,形成5個檔案,以備後續測試刪除功能 */

while(i < 5)

imwrite(full_img_name, img);

sleep(1);

i++; }

sleep(10);

/* 檔案寫入10秒後刪除檔案及其所在的子路徑 */

bool is_del = delete_file(sub_dir);

if(is_del)

else

return 0;

}

上例中定義了乙個函式:delete_file(string file_path),該函式通過對自己的遞迴呼叫實現路徑file_path及其下所有檔案的刪除。在該函式中,用到的函式和結構體需要簡單說明下:

2.1 dir

找到的定義如下:

struct __dirstream

;typedef struct __dirstream dir;

2.2 struct dirent

struct dirent

2.3 struct stat

上例中,該結構體用來存放某目錄的詳細資訊,通過執行lstat(file_path.c_str(), &buf),將file_path表示的路徑的詳細資訊儲存在stat型別的buf結構體中。後面通過執行s_isreg(buf.st_mode)、s_isdir(buf.st_mode)判斷當前路徑是常規檔案,還是乙個路徑。

struct stat 

;

2.4 刪除檔案remove()

函式原型如下,輸入引數可以是乙個路徑,也可以是乙個常規檔名。但如果是路徑,只能是空路徑,如果路徑非空,呼叫remove是無法將其刪除的,因此才有上面例子中的遞迴呼叫。

#include int remove(char * filename);
2.5 路徑操作:

用到的幾個dir操作如下,比較簡單,不過多解釋。

#include#includedir* opendir (const char * path );

struct dirent *readdir(dir *dirp);

int closedir(dir *dir);

int rmdir(const char *dirname );

Linux C 檔案複製的實現

參考網上的 整理的比較完整的,關於使用read 和write 函式,實現檔案拷貝的 執行結果 開啟原始檔 if from fd open argv 1 o rdonly 1 建立目標檔案 if to fd open argv 2 o wronly o creat,s irusr s iwusr 1 ...

linux c複製檔案方法

這裡主要 用到的函式是 open,read,write include include include include include include include char buff 1024 int len int main int argc,char const argv return 0 ...

LinuxC實現資料夾及檔案拷貝

linuxc實現資料夾及檔案拷貝 include include include include include include include 判斷是否為目錄 int is dir char path 處理字串的函式 int endwith char s,char c char str conta...