文件C:WINDOWS\systen32\zh-cn已损坏无法读取,请运行chkdsk工具怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件C:WINDOWS\systen32\zh-cn已损坏无法读取,请运行chkdsk工具怎么办?相关的知识,希望对你有一定的参考价值。

这是磁盘出了问题请修复一下(每个磁盘都修复一下或只修复C)。

系统自带的磁盘修复方法:


具体步骤如下:

在我的电脑中选中盘符C 后单击鼠标右键选属性,在弹出的驱动器属性窗口中依次选择“工具→开始检查”并选择“自动修复文件系统错误”和“扫描并恢复坏扇区”,然后点击开始,扫描时间会因磁盘容量及扫描选项的不同而有所差异(按上面的方法做后,会弹出一个框,点是,自动关机后在开机进行修复,Win7选按计划磁盘检查按钮)。


硬盘坏道将导致电脑系统文件损坏或丢失,电脑无法启动或死机。硬盘坏道可以采用NDD磁盘工具或Scandisk来修复。


如果故障依旧,请还原一下系统或重装(还是不行格式化硬盘重新分区重装,在不行就要换硬盘了,或检修)。

参考技术A 这是磁盘出了问题请修复一下(每个磁盘都修复一下或只修复C)。

系统自带的磁盘修复方法:
具体步骤如下:在我的电脑中选中盘符C 后单击鼠标右键选属性,在弹出的驱动器属性窗口中依次选择“工具→开始检查”并选择“自动修复文件系统错误”和“扫描并恢复坏扇区”,然后点击开始,扫描时间会因磁盘容量及扫描选项的不同而有所差异(按上面的方法做后,会弹出一个框,点是,自动关机后在开机进行修复,Win7选按计划磁盘检查按钮)。

硬盘坏道将导致电脑系统文件损坏或丢失,电脑无法启动或死机。硬盘坏道可以采用NDD磁盘工具或Scandisk来修复。

如果故障依旧,请还原一下系统或重装(还是不行格式化硬盘重新分区重装,在不行就要换硬盘了,或检修一下去吧)。

C/C++ Windows和Linux通用的一个函数,从文件路径中 提取 (文件名) 和 (文件后缀)

假如给你一个文件路径,你可以将其中的文件名和文件后缀提取出来嘛?
不会没有关系,此篇博客提供一个函数,即可在Windows环境下调用,也可以在Linux环境下调用,去获取一个文件路径的文件名和文件后缀!


一、返回值 bool 版

需要包含头文件:
#include <stdio.h>
#include <string.h>
#include <string>

代码如下:

/******************************************************************************
 *
 * 功能:
 *		获得 (文件名.后缀) 和 (文件名) 和 (文件后缀),Windows和Linux通用!
 *
 * 参数:
 *		_filePaht:C语言字符指针,文件路径字符串
 *		_fileName:C++字符串引用,获得[(文件名.后缀)|(文件名)]返回
 *		_fileName:C++字符串引用,获得(文件名.后缀)返回
 *		_fileSuffix:C++字符串引用,获得(后缀)返回
 *		_dot:true,后缀带点(.txt);false,后缀不带点(txt);默认值为true
 *
 * 返回值:
 *		成功返回true,失败返回false
 *
 ******************************************************************************/
bool get_fileName_fileSuffix(const char *_filePaht, std::string &_fileNames, std::string &_fileName, std::string &_fileSuffix, bool _dot = true) 

	// 合法性检查
	if (!_filePaht) return false;
	std::string str = _filePaht;
	if (str.empty()) return false;


	// .txt    的情况
	if (str.at(0) == '.') return false;
	// file.   的情况
	if (str.at(str.size() - 1) == '.') return false;
	

	char c = '\\0';

// 区分此函数是在Windows环境调用还是Linux环境调用
#if defined (_WIN64) || defined (WIN32) || defined (_WIN32)
	//printf("---Windows---\\n");
	c = '\\\\';
#else
	//printf("---Linux---\\n");
	c = '\\/';
#endif

	// 去除字符串中的路径,剩下文件名
	std::string filename = strrchr(_filePaht, c) == NULL ? "" : strrchr(_filePaht, c) + 1;
	if (filename == "") 
		/* 说明字符串是file.txt或者file形式 */
		filename = _filePaht;
	
	 else 
		/* 说名字符串是C:\\\\abc\\\\file.txt或者C:\\\\abc\\\\file形式 */
	

	// 找到 . 的位置
	size_t _size = filename.rfind(".");
	// 获得文件名,不包含后缀
	_fileName = filename.substr(0, _size);

	// 获得文件后缀
	std::string strsuffix = "";
	if (_size != -1) 	// 不等于-1说明有后缀 file.txt形式

		// true后缀带点,false后缀不带点
		if (_dot == true) 
			strsuffix = filename.substr(_size);     // 文件后缀 .txt

		 else 
			strsuffix = filename.substr(_size + 1);     // 文件后缀 txt
		
	
	// 后缀
	_fileSuffix = strsuffix;

	// 获得文件名.后缀(file.txt | file)
	_fileNames = filename;

	return true;

具体过程就不解释了,都有详细注释,去看,去理解吧。

  1. 测试Windows路径:
    C:\\abc\\file.txt
    C:\\abc\\file
    file.txt
    file

    int main(void) 
    
    	// C:\\\\abc\\\\file.txt
    	// C:\\\\abc\\\\file
    	// file.txt
    	// file
    
    	std::string fileNames = "";
    	std::string fileName = "";
    	std::string fileSuffix = "";
    	bool suffix = true;
    	bool flag = false;
    
    	//printf("---Windows---\\n");
    
    	flag = get_fileName_fileSuffix("C:\\\\abc\\\\file.txt", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "C:\\\\abc\\\\file.txt", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("C:\\\\abc\\\\file", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "C:\\\\abc\\\\file", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("file.txt", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "file.txt", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("file", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "file", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	fileNames = "";
    	fileName = "";
    	fileSuffix = "";
    	flag = get_fileName_fileSuffix("", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "\\"\\"", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	return 0;
    
    

    运行截图:
    这个是后缀带点(.txt)的测试

  2. 测试Linux路径:
    /abc/file.txt
    /abc/file
    file.txt
    file

    int main(void) 
    
    	std::string fileNames = "";
    	std::string fileName = "";
    	std::string fileSuffix = "";
    	bool suffix = false;
    	bool flag = false;
    
    	// /abc/file.txt
    	// /abc/file
    	// /file.txt
    	// file
    	//printf("---Linux---\\n");
    
    	flag = get_fileName_fileSuffix("/abc/file.txt", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "/abc/file.txt", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("/abc/file", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "/abc/file", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("file.txt", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "/file.txt", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	flag = get_fileName_fileSuffix("file", fileNames, fileName, fileSuffix, suffix);
    	printf("str = %s, fileNames = %s   fileName = %s   fileSuffix = %s   flag = %d\\n\\n", "/file", fileNames.c_str(), fileName.c_str(), fileSuffix.c_str(), flag);
    
    	return 0;
    
    

    运行截图:
    这个是后缀不带点(txt)的测试


二、返回值 后缀索引 版

第一个版本是两个星期前写好的,后续回来看后,觉得返回值好像不是太友好,于是乎更改了以下版本代码。
返回的是 后缀索引 。

处理过程不变!

需要包含头文件:
#include <stdio.h>
#include <string.h>
#include <string>

/******************************************************************************
 *
 * 功能:
 *		获得 (文件名.后缀) 和 (文件名) 和 (文件后缀),Windows和Linux通用!
 *
 * 参数:
 *		_filePaht:			C语言字符指针,文件路径字符串
 *		_fullFileName:		C++字符串引用,获得[(文件名.后缀) 或 (文件名)]返回
 *		_fileName:			C++字符串引用,获得(文件名.后缀)返回
 *		_fileSuffix:		C++字符串引用,获得(后缀)返回
 *		_dot:				true,后缀带点(.txt);false,后缀不带点(txt);默认值为true
 *
 * 返回值:
 *		有后缀返回"."的索引;没有后缀则返回-1
 *
 ******************************************************************************/
int get_fileName_fileSuffix(const char *_filePaht, std::string &_fullFileName, std::string &_fileName, std::string &_fileSuffix, bool _dot = true) 

	// 合法性检查
	if (!_filePaht) return -1;
	std::string str = _filePaht;
	if (str.empty()) return -1;

	// .txt    的情况
	if (str.at(0) == '.') return -1;
	// file.   的情况
	if (str.at(str.size() - 1) == '.') return -1;



	char c = '\\0';

	// 区分此函数是在Windows环境调用还是Linux环境调用
#if defined (_WIN64) || defined (WIN32) || defined (_WIN32)
	//printf("---Windows---\\n");
	c = '\\\\';
#else
	//printf("---Linux---\\n");
	c = '\\/';
#endif

	// 去除字符串中的路径,剩下文件名
	std::string filename = strrchr(_filePaht, c) == NULL ? "" : strrchr(_filePaht, c) + 1;
	if (filename == "") 
		/* 说明字符串是file.txt或者file形式 */
		filename = _filePaht;

	 else 
		/* 说名字符串是C:\\\\abc\\\\file.txt或者C:\\\\abc\\\\file形式 */
	

	// 找到 . 的位置
	size_t _size = filename.rfind(".");
	// 获得文件名,不包含后缀
	_fileName = filename.substr(0, _size);

	// 获得文件后缀
	std::string strsuffix = "";
	if (_size != -1) 	// 不等于-1说明有后缀 file.txt形式

		// true后缀带点,false后缀不带点
		if (_dot == true) 
			strsuffix = filename.substr(_size);     // 文件后缀 .txt

		 else 
			strsuffix = filename.substr(_size + 1);     // 文件后缀 txt
		
	
	// 后缀
	_fileSuffix = strsuffix;

	// 获得文件名.后缀(file.txt | file)
	_fullFileName = filename;

	return _size;

测试:

int main(void) 

	std::string str = "abc.jpg";
	//std::string str = ".abcjpg";
	//std::string str = "abcjpg.";
	std::string fullFilename, filename, fileSuffix;
	int r = get_fileName_fileSuffix(str.c_str(), fullFilename, filename, fileSuffix, true);
	printf("r = %d\\n", r);
	printf("fullFilename = %s   filename = %s   fileSuffix = %s\\n", fullFilename.c_str(), filename.c_str(), fileSuffix.c_str());


	return 0;

运行截图:


总结

本人在做项目时经常需要在一个路径中提取出文件名和文件路径,但是在项目中写的是零散的代码,所以在这里总结成一个函数,通过这个函数去获取就方便多了,而且windows和linux通用!(废了两个三个小时写代码、测试和写博客,值得!)

以上是关于文件C:WINDOWS\systen32\zh-cn已损坏无法读取,请运行chkdsk工具怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

C:\Windows\System32\drivers\etc文件夹中iCalendar 文件类型的hosts文件是干嘛用的

无法注册模块C:\windows\system32\aetcngss.dll.HRESULT-2147220473.请与您的技术支持人员联系.

c:windows\system32\smasext.dll没有被指定windows上运行

cannot open"c:WINDOWS\system32\drivers\etc\hosts另一个程序正在使用此文件进程无法访问怎么办

如何修改HOSTS文件内容

c:\windows\assembly\\