如何修改文件只读属性

如何修改文件只读属性,第1张

问题一:文件只读属性改不了 右击文件->“属性”->“安全”,在“组或用户名称”中找到你自己的当前用户(一般来说是Administrator,如果有改动就选择你改过后的用户),在下面“权限”框中钩选完全控制。就好了。但是在发动前,你要有管理员的权限。

你还可以改文件夹的权限,方法同上。

如果“属性”中没有“安全”选项,可以在“我的电脑”中,“工具”菜单栏->“文件夹选项”->“查看”->“使用简单文件共享(推荐)”前面的钩去掉后,再“确定”“确定”,在“属性”中就会出现“安全”选项。

问题二:怎样把只读文件改为可以修改的? 那可能是权限问题。

你改下权限应该就可以。

打开我的电脑,选择工具-文件夹选项,点查看,不要勾选使用简单文件共享,点确定。

再打开文件属性,点安全。把下面那些全改为允许就行了。

再不行,就得在安全那上面那框框里添加用户了。

问题三:Win7无法修改文件的只读属性怎么办 win7下文件属性为只读,无法更改:

在WIN7下,属性分为两部分:

一部分是文件夹属性,只读不可选,因为文件夹中含多个文件夹和文件。

另一部分是文件属性,只读是可选的。

如果确认需要更改文件夹或者文件的只读属性的话,可以进DOS下进行更改,方法如下:

1、点开始――在运行框中输入cmd,选中cmd,鼠标右键选择以管理员身份运行;

2、设置只读:输入attrib 文件夹名或者文件名 +r,按回车键。

例如:在c:\>提示符下输入attrib txt +r,按回车键;

即设置c:\根目录下的txt文件夹为只读。

取消只读:输入attrib 文件夹名或者文件名 -r,按回车键。

问题四:如何把文件夹设为只读属性? 如果是XP系统的话,先在文件夹选项里取消 简胆文件夹共享,然后在对你不想被修改的文件夹点右键,属性,安全,之后把权限全部设置为拒绝,就可以阻止系统向该文件夹写入任何内容。

问题五:如何将word只读格式进行修改 右击文件---属性---只读前面的对勾去掉。就可以了

问题六:只读的pdf文件怎么修改其只读属性? PDF Unlocker

问题七:怎样把word只读文件转换可编辑文件 这是word常见问题,有3中办法可以解决:

1、右击word--属性--将“只读”前的√去掉就可以了。

2、打开word,另存为 即可。

3、在新建的word种,将只读文件的内容复制、粘贴过来即可

这三中种办法都可以,选用一种就可以了。

问题八:怎么设置文件夹属性为只读,不能修改、复制文件? 1 右击文件-属性-共享抚选择需要共享的用户-添加-共享-完成.

2 再次文件-属性-高级共享-权限中用户的权限设置中勾选读取-确定.

问题九:windows7 的系统文件的只读属性怎么改 若要查看或删除文件夹的“只读”或“系统”属性,请在命令提示符下使用 Attrib 命令:

1. 单击「开始」按钮,在搜索框中键入 cmd,然后按 Enter。

2. 若要查看 Attrib 命令的语法,请在命令提示符下键入 attrib \?。

警告: 如果从文件夹中删除“只读”或“系统”属性,该文件夹可能会以普通文件夹的形式出现,并可能会丢失某些自定义特征。例如,Windows 自定义“字体”文件夹并提供一个允许隐藏变量(如粗体和斜体)的专用文件夹视图。它还允许以字体特定的方式更改文件夹的视图设置。如果删除“字体”文件夹的“只读”和“系统”属性,则这些自定义的视图设置变为不可用。对于使用文件夹“属性”对话框的“自定义”选项卡自定义的文件夹,如果删除“只读”属性,则可能会丢失文件夹图标和其他自定义特征。

如果程序不能将文件保存到具有“只读”属性的文件夹(如“我的文档”),可在命令提示符下使用 Attrib 命令将“只读”属性更改为“系统”属性。

若要删除“只读”属性并设置“系统”属性,请使用以下命令:

attrib -r +s drive:\\

例如,若要删除 C:\Test 文件夹的“只读”属性并为其设置“系统”属性,请使用下面的命令:attrib -r +s c:\test

请注意,如果为某些文件夹设置了“系统”属性和“只读”属性,一些程序可能会无法正常运行。可以使用以下命令来删除这些属性: attrib -r -s c:\test

祝你好运

问题十:为什么所有文件属性中变成只读?如何解决问题? 这个权限被篡改造成的:

修复方法如下:

1、控制面板-〉文件夹选项-〉查看-〉简单的文件共享,

取消掉

2、文件所在的目录-〉右键,属性-〉安全-〉高级-〉继承目录权限,

取消掉。

试下看行不行。

或者:1、找到该文件或文件夹-右击-属性-安全-在“允许”下选择完全控制-应用。如果这样不行的话就用下面的办法。(自己试出来的)

2、找到该文件-右击-属性-安全-高级-所有者-用户名-确定-确定-接着重复1即可。

已修改答复,请试验~~

如果实在linux下,你可以用stat()函数查看,windows下我不知道函数,通常我是在linux下做的。。

不过在windows下,你可以使用

需要包含

#include

system("attrib"

+

szfilename)

看看,szfilename是你的文件名,写入双引号内~

比如文件叫a.c

你就

system("attrib

a.c")

即可~

这篇文章主要介绍了C/C++ 监控磁盘与目录 *** 作的示例,帮助大家更好的理解和学习C/C++编程,感兴趣的朋友可以了解下

遍历磁盘容量:

#include <stdio.h>

#include <Windows.h>

void GetDrivesType(const char* lpRootPathName)

{

UINT uDriverType = GetDriveType(lpRootPathName)

switch (uDriverType)

{

case DRIVE_UNKNOWN:puts("未知磁盘")break

case DRIVE_NO_ROOT_DIR: puts("路径无效")break

case DRIVE_REMOVABLE: puts("可移动磁盘")break

case DRIVE_FIXED: puts("固定磁盘")break

case DRIVE_REMOTE: puts("网络磁盘")break

case DRIVE_CDROM: puts("光驱")break

case DRIVE_RAMDISK: puts("内存映射盘")break

default: break

}

}

void GetDrivesFreeSpace(const char* lpRootPathName)

{

unsigned long long available, total, free

if (GetDiskFreeSpaceEx(lpRootPathName, (ULARGE_INTEGER*)&available,

(ULARGE_INTEGER*)&total, (ULARGE_INTEGER*)&free))

{

printf("磁盘: %s | 总计: %lld MB 已用: %lld MB 剩余: %lld MB \n",

lpRootPathName, total >>20, available >>20, free >>20)

}

}

int main(int argc,char *argv[])

{

DWORD dwSize = MAX_PATH

char szLogicalDrives[MAX_PATH] = {0}

// 获取逻辑驱动器号字符串

DWORD dwResult = GetLogicalDriveStringsA(dwSize, szLogicalDrives)

if (dwResult >0 &&dwResult <= MAX_PATH) {

char* szSingleDrive = szLogicalDrives // 从缓冲区起始地址开始

while (*szSingleDrive) {

//printf("Drive: %s\n", szSingleDrive) // 输出单个驱动器的驱动器号

// GetDrivesType(szSingleDrive)

GetDrivesFreeSpace(szSingleDrive)

szSingleDrive += strlen(szSingleDrive) + 1// 获取下一个驱动器地址

}

}

system("pause")

return 0

}

遍历文件特定路径:

循环遍历文件路径,并将文件后缀为.exe的路径筛选出来.

#include <stdio.h>

#include <windows.h>

#include <tlhelp32.h>

void SearchFile(char *pszDirectory)

{

// 搜索指定类型文件

char *pszFileName = NULL

char *pTempSrc = NULL

WIN32_FIND_DATA FileData = { 0 }

// 申请动态内存

pszFileName = new char[2048]

pTempSrc = new char[2048]

// 构造搜索文件类型字符串 *.* 表示搜索所有文件类型

wsprintf(pszFileName, "%s\\*.*", pszDirectory)

HANDLE hFile = ::FindFirstFile(pszFileName, &FileData)

if (INVALID_HANDLE_VALUE != hFile)

{

do

{

// 过滤掉当前目录"." 和上一层目录".."

if ('.' == FileData.cFileName[0])

continue

// 拼接文件路径

wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName)

// 判断是否是目录还是文件

if (FileData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)

SearchFile(pTempSrc)// 如果是目录则继续递归

else

{

char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT]

_splitpath(pTempSrc, drive, dir, fname, ext)

// 如果是文件并且后缀为.exe则输出具体路径

if (strcmp(ext, ".exe") == 0)

printf("%s \n", pTempSrc)

}

} while (::FindNextFile(hFile, &FileData))

}

FindClose(hFile)

delete[]pTempSrc

delete[]pszFileName

}

int main(int argc, char * argv[])

{

SearchFile("c:\\MinGW7")

system("pause")

return 0

}

监控文件目录变化:

#include <stdio.h>

#include <windows.h>

#include <tlhelp32.h>

UINT MonitorFileThreadProc(LPVOID lpVoid)

{

char *pszDirectory = (char *)lpVoid

// 打开目录, 获取文件句柄

HANDLE hDirectory = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL)

if (INVALID_HANDLE_VALUE == hDirectory)

return 1

char szFileName[MAX_PATH] = { 0 }

BOOL bRet = FALSE

DWORD dwRet = 0

DWORD dwBufferSize = 2048

// 申请一个足够大的缓冲区

BYTE *pBuf = new BYTE[dwBufferSize]

if (NULL == pBuf)

return 2

FILE_NOTIFY_INFORMATION *pFileNotifyInfo = (FILE_NOTIFY_INFORMATION *)pBuf

// 开始循环设置监控

do

{

RtlZeroMemory(pFileNotifyInfo, dwBufferSize)

// 设置监控目录

bRet = ReadDirectoryChangesW(hDirectory, pFileNotifyInfo, dwBufferSize, TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件属性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次写入

&dwRet, NULL, NULL)

if (FALSE == bRet)

break

// 将宽字符转换成窄字符,宽字节字符串转多字节字符串

WideCharToMultiByte(CP_ACP, 0, (wchar_t *)(&pFileNotifyInfo->FileName),

(pFileNotifyInfo->FileNameLength / 2),szFileName,MAX_PATH,NULL,NULL)

// 将路径与文件连接成完整文件路径

char FullFilePath[1024] = { 0 }

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory))

strcat(FullFilePath, szFileName)

// 判断 *** 作类型并显示

switch (pFileNotifyInfo->Action)

{

case FILE_ACTION_ADDED:

printf("文件被 [创建]: %s \n", FullFilePath)break

case FILE_ACTION_REMOVED:

printf("文件被 [删除]: %s \n", FullFilePath)break

case FILE_ACTION_MODIFIED:

printf("文件被 [修改]: %s \n", FullFilePath)break

case FILE_ACTION_RENAMED_OLD_NAME:

printf("文件被 [重命名]: %s \n", FullFilePath)break

}

} while (bRet)

CloseHandle(hDirectory)

delete[] pBuf

pBuf = NULL

return 0

}

int main(int argc, char * argv[])

{

char *pszDirectory = "C:\\"

// 创建线程开始监控

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MonitorFileThreadProc, pszDirectory, 0, NULL)

while (1)

{

Sleep(10000)

}

system("pause")

return 0

}

监控目录文件变化:

可以将其改为一个简单的文件防篡改程序,也可以用来监控病毒的行为.

#include <stdio.h>

#include <Windows.h>

#include <tlhelp32.h>

DWORD WINAPI MonitorFileThreadProc(LPVOID lParam)

{

char *pszDirectory = (char *)lParam

BOOL bRet = FALSE

BYTE Buffer[1024] = { 0 }

FILE_NOTIFY_INFORMATION *pBuffer = (FILE_NOTIFY_INFORMATION *)Buffer

DWORD dwByteReturn = 0

HANDLE hFile = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL)

if (INVALID_HANDLE_VALUE == hFile)

return 1

while (TRUE)

{

ZeroMemory(Buffer, sizeof(Buffer))

// 设置监控目录回调函数

bRet = ReadDirectoryChangesW(hFile,&Buffer,sizeof(Buffer),TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件属性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次写入

&dwByteReturn, NULL, NULL)

if (TRUE == bRet)

{

char szFileName[MAX_PATH] = { 0 }

// 将宽字符转换成窄字符,宽字节字符串转多字节字符串

WideCharToMultiByte(CP_ACP,0,pBuffer->FileName,(pBuffer->FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL)

// 将路径与文件连接成完整文件路径

char FullFilePath[1024] = { 0 }

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory))

strcat(FullFilePath, szFileName)

switch (pBuffer->Action)

{

case FILE_ACTION_ADDED:

{

printf("添加: %s \n", FullFilePath)break

}

case FILE_ACTION_REMOVED:

{

printf("删除: %s \n", FullFilePath)break

}

case FILE_ACTION_MODIFIED:

{

printf("修改: %s \n", FullFilePath)break

}

case FILE_ACTION_RENAMED_OLD_NAME:

{

printf("重命名: %s", szFileName)

if (0 != pBuffer->NextEntryOffset)

{

FILE_NOTIFY_INFORMATION *tmpBuffer = (FILE_NOTIFY_INFORMATION *)

((DWORD)pBuffer + pBuffer->NextEntryOffset)

switch (tmpBuffer->Action)

{

case FILE_ACTION_RENAMED_NEW_NAME:

{

ZeroMemory(szFileName, MAX_PATH)

WideCharToMultiByte(CP_ACP,0,tmpBuffer->FileName,

(tmpBuffer->FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL)

printf(" ->%s \n", szFileName)

break

}

}

}

break

}

case FILE_ACTION_RENAMED_NEW_NAME:

{

printf("重命名(new): %s \n", FullFilePath)break

}

}

}

}

CloseHandle(hFile)

return 0

}

int main(int argc, char * argv[])

{

char *pszDirectory = "C:\\"

HANDLE hThread = CreateThread(NULL, 0, MonitorFileThreadProc, pszDirectory, 0, NULL)

WaitForSingleObject(hThread, INFINITE)

CloseHandle(hThread)

return 0

}

以上就是C/C++ 监控磁盘与目录 *** 作的示例的详细内容


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8134577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存