>>[C++ 관련 모든 글 보기]
1. 파일 rename
#include <iostream>
#include <filesystem>
int main() {
try {
std::filesystem::rename("from.txt", "to.txt");
} catch (std::filesystem::filesystem_error& e) {
std::cout << e.what() << '\n';
}
return 0;
}
2. 파일 사이즈 얻기
- stat 함수 사용
- 파일 정보를 담는 구조체 struct stat
struct stat {
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* inode number */
mode_t st_mode; /* 파일의 종류 및 접근권한 */
nlink_t st_nlink; /* hardlink 된 횟수 */
uid_t st_uid; /* 파일의 owner */
gid_t st_gid; /* group ID of owner */
dev_t st_rdev; /* device ID (if special file) */
off_t st_size; /* 파일의 크기(bytes) */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t st_blocks; /* number of 512B blocks allocated */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last status change */
};
#include <iostream>
#include <sys/stat.h>
int main()
{
int ret = 0;
struct stat buf;
// 파일의 관한 정보를 받아올 stat 구조체 변수 선언.
// 해당 구조체는 sys/stat.h 파일 안에 있습니다.
ret= stat("test.txt", &buf);
if(ret < 0) // stat 함수에서 돌려준 결과값이 0이 아니라면 ERROR 이므로 예외 처리.
{
printf("ERROR\n");
return 0;
}
printf("RET[%d] SIZE[%d]\n", ret, buf.st_size);
// buf.st_size 에 담겨 있는 값이 파일의 사이즈 입니다.
return 0;
}
3. 디렉토리 리스팅
1) C++ 지원 버전
- C++ 17 부터 공식 지원하는 std::filesystem::directory_iterator 를 사용
2) Compile 방법
#g++ -std=c++17 -o test test.cpp -lstdc++fs
3) Sample Code
#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
std::string path = "/root/test/"; // 검색할 폴더명
for (const auto & entry : fs::directory_iterator(path))
// 전체 경로 출력
// Ex) /root/test/sample.txt
std::cout << entry.path() << std::endl;
// "파일명 출력"
// "sample.txt"
std::cout << entry.path().filename() << std::endl;
// 파일명 출력
// sample.txt
std::cout << entry.path().filename().string() << std::endl;
}
4. 파일 확인
1) 지원
C++ 17 이상 부터 지원
2) sample code
//선언 : bool exists( const std::filesystem::path& p );
std::filesystem::exists("helloworld.txt");
3) 그외 에 파일 확인 방법
5. 디렉토리 삭제
1) 지원
C++ 17 이상 부터 지원
2) sample code
#include <filesystem>
std::filesystem::remove("myEmptyDirectoryOrFile"); // Deletes empty directories or single files.
std::filesystem::remove_all("myDirectory"); // Deletes one or more files recursively.
3) sample code2
#include <iostream>
#include <cstdint>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::path dir = fs::temp_directory_path();
fs::create_directories(dir / "abcdef/example");
std::uintmax_t n = fs::remove_all(dir / "abcdef");
std::cout << "Deleted " << n << " files or directories\n";
}
>>[C++ 관련 모든 글 보기]
'ProgrammingLang > c++' 카테고리의 다른 글
[C++ 개발자되기] 17. std::cout 출력 포맷 변경 iomanip (2) | 2020.03.18 |
---|---|
[C++ 개발자되기] 16. smart pointer (0) | 2020.02.24 |
[C++ 개발자되기] 14. millisecond시간 구하기 (0) | 2020.02.02 |
[C++ 개발자되기] 13. 숫자 -> 문자 변환 AND 문자 -> 숫자 변환 (0) | 2020.01.08 |
[C++ 개발자되기] 12. text file read 및 write (0) | 2019.12.05 |