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...