文件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;
具体过程就不解释了,都有详细注释,去看,去理解吧。
-
测试Windows路径:
C:\\abc\\file.txt
C:\\abc\\file
file.txt
fileint 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)的测试
-
测试Linux路径:
/abc/file.txt
/abc/file
file.txt
fileint 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另一个程序正在使用此文件进程无法访问怎么办