C++程序 使文件只读
在C++编程语言中,我们常常需要对文件进行读取和写入。但是,有些情况下我们需要保护文件的安全性,并防止文件被意外修改,这时就需要将文件设置为只读模式。本文将介绍如何在C++中编写程序来使文件只读。
Windows平台
在Windows平台下,我们可以使用
“`SetFileAttributes“`函数将指定文件设置为只读模式。以下是一个示例代码,它将文件“`test.txt“`设置为只读模式,并输出调用结果:
#include <iostream>
#include <Windows.h>
int main() {
const char* file_path = "test.txt";
DWORD attributes = GetFileAttributesA(file_path);
if (attributes != INVALID_FILE_ATTRIBUTES) {
SetFileAttributesA(file_path, attributes | FILE_ATTRIBUTE_READONLY);
std::cout << "Set file " << file_path << " as readonly successfully." << std::endl;
} else {
std::cerr << "Failed to get file attributes of " << file_path << std::endl;
}
return 0;
}
注:DWORD
是Windows API定义的一种整型数据类型。
Linux平台
在Linux平台下,我们可以使用
“`chmod“`命令或者“`fchmod“`函数将指定文件设置为只读模式。以下是一个示例代码,它将文件“`test.txt“`设置为只读模式,并输出调用结果:
#include <iostream>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
const char* file_path = "test.txt";
int fd = open(file_path, O_RDONLY);
if (fd != -1) {
fchmod(fd, S_IRUSR);
std::cout << "Set file " << file_path << " as readonly successfully." << std::endl;
} else {
std::cerr << "Failed to open file " << file_path << std::endl;
}
close(fd);
return 0;
}
跨平台
如果你的代码需要跨平台运行,可以使用Boost库中提供的
“`boost::filesystem“`库。以下是一个跨平台示例代码:
#include <iostream>
#include <boost/filesystem.hpp>
int main() {
const char* file_path = "test.txt";
boost::filesystem::path p(file_path);
if (boost::filesystem::exists(p)) {
boost::filesystem::permissions(p, boost::filesystem::owner_read | boost::filesystem::group_read | boost::filesystem::others_read);
std::cout << "Set file " << file_path << " as readonly successfully." << std::endl;
} else {
std::cerr << "Failed to get file " << file_path << " attributes." << std::endl;
}
return 0;
}
结论
在C++编程中,我们可以使用操作系统提供的API或者第三方库来使文件只读。无论是Windows平台、Linux平台还是跨平台运行,我们都可以找到合适的方法来实现。当我们需要保护文件的安全性时,这些方法都可以为我们提供一定的帮助。