.net 文件操作
一.DotNet文件目录常用操作:
DiveInfo:提供了对逻辑磁盘的基本信息访问的途径。(只能查看信息,不能做任何修改。)
System.Environment:用来枚举驱动器。(不能获取驱动器的属性)
System.Management:.NET针对WMI调用。
(WMI,是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI,如图所示,工具软件和脚本程序可以方便地读写WMI。)
Directory和DircetoryInfo:用于操作目录。(前者为静态类,后者则须在实例化后调用,功能上相同)
File和FileInfo:用于操作文件。(前者为静态类,后者须实例化后调用,功能上相同)
以上介绍了一些文件的基本操作类,本次主要讲解目录和文件操作,一下给出文件和目录操作的一些基本方法
(1).文件操作:
/// <summary>
/// 写文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="content">文件内容</param>
/// <param name="encoding">指定文件编码</param>
protected void Write_Txt(string fileName, string content, string encoding)
{
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentNullException(fileName);
}
if (string.IsNullOrEmpty(content))
{
throw new ArgumentNullException(content);
}
if (string.IsNullOrEmpty(encoding))
{
throw new ArgumentNullException(encoding);
}
var code = Encoding.GetEncoding(encoding);
var htmlfilename = HttpContext.Current.Server.MapPath("Precious\\" + fileName + ".txt");
var str = content;
var sw = StreamWriter.Null;
try
{
using (sw = new StreamWriter(htmlfilename, false, code))
{
sw.Write(str);
sw.Flush();
}
}
catch (IOException ioex)
{
throw new IOException(ioex.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
sw.Close();
}
} /// <summary>
/// 读文件
/// </summary>
/// <param name="filename">文件路径</param>
/// <param name="encoding">文件编码</param>
/// <returns></returns>
protected string Read_Txt(string filename, string encoding)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
if (string.IsNullOrEmpty(encoding))
{
throw new ArgumentNullException(encoding);
}
var code = Encoding.GetEncoding(encoding);
var temp = HttpContext.Current.Server.MapPath("Precious\\" + filename + ".txt");
var str = string.Empty;
if (!System.IO.File.Exists(temp)) return str;
var sr = StreamReader.Null;
try
{
using (sr = new StreamReader(temp, code))
{
str = sr.ReadToEnd();
}
}
catch (IOException ioex)
{
throw new IOException(ioex.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
sr.Close();
}
return str;
} /// <summary>
/// 拷贝文件
/// </summary>
/// <param name="orignFile">原始文件</param>
/// <param name="newFile">新文件路径</param>
public static void FileCoppy(string orignFile, string newFile)
{
if (string.IsNullOrEmpty(orignFile))
{
throw new ArgumentException(orignFile);
}
if (string.IsNullOrEmpty(newFile))
{
throw new ArgumentException(newFile);
}
System.IO.File.Copy(orignFile, newFile, true);
} /// <summary>
/// 删除文件
/// </summary>
/// <param name="path">路径</param>
public static void FileDel(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException(path);
}
System.IO.File.Delete(path);
} /// <summary>
/// 移动文件
/// </summary>
/// <param name="orignFile">原始路径</param>
/// <param name="newFile">新路径</param>
public static void FileMove(string orignFile, string newFile)
{
if (string.IsNullOrEmpty(orignFile))
{
throw new ArgumentException(orignFile);
}
if (string.IsNullOrEmpty(newFile))
{
throw new ArgumentException(newFile);
}
System.IO.File.Move(orignFile, newFile);
}
2.目录操作:
/// <summary>
/// 在当前目录下创建目录
/// </summary>
/// <param name="orignFolder">当前目录</param>
/// <param name="newFloder">新目录</param>
public static void FolderCreate(string orignFolder, string newFloder)
{
if (string.IsNullOrEmpty(orignFolder))
{
throw new ArgumentException(orignFolder);
}
if (string.IsNullOrEmpty(newFloder))
{
throw new ArgumentException(newFloder);
}
Directory.SetCurrentDirectory(orignFolder);
Directory.CreateDirectory(newFloder);
} /// <summary>
/// 创建文件夹
/// </summary>
/// <param name="path"></param>
public static void FolderCreate(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException(path);
}
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
} public static void FileCreate(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException(path);
}
var createFile = new FileInfo(path);
if (createFile.Exists) return;
var fs = createFile.Create();
fs.Close();
fs.Dispose();
} /// <summary>
/// 递归删除文件夹目录及文件
/// </summary>
/// <param name="dir"></param>
/// <returns></returns>
public static void DeleteFolder(string dir)
{
if (string.IsNullOrEmpty(dir))
{
throw new ArgumentException(dir);
}
if (!Directory.Exists(dir)) return;
foreach (var d in Directory.GetFileSystemEntries(dir))
{
if (System.IO.File.Exists(d))
{
//直接删除其中的文件
System.IO.File.Delete(d);
}
else
{
//递归删除子文件夹
DeleteFolder(d);
}
}
//删除已空文件夹
Directory.Delete(dir, true);
} /// <summary>
/// 指定文件夹下面的所有内容copy到目标文件夹下面
/// </summary>
/// <param name="srcPath">原始路径</param>
/// <param name="aimPath">目标文件夹</param>
public static void CopyDir(string srcPath, string aimPath)
{
if (string.IsNullOrEmpty(srcPath))
{
throw new ArgumentNullException(srcPath);
}
if (string.IsNullOrEmpty(aimPath))
{
throw new ArgumentNullException(aimPath);
}
try
{
if (aimPath[aimPath.Length - ] != Path.DirectorySeparatorChar)
{
aimPath += Path.DirectorySeparatorChar;
}
if (!Directory.Exists(aimPath))
{
Directory.CreateDirectory(aimPath);
}
var fileList = Directory.GetFileSystemEntries(srcPath);
foreach (var file in fileList)
{
if (Directory.Exists(file))
{
CopyDir(file, aimPath + Path.GetFileName(file));
}
else
{
System.IO.File.Copy(file, aimPath + Path.GetFileName(file), true);
}
}
}
catch (IOException ioex)
{
throw new IOException(ioex.Message);
}
catch (Exception ee)
{
throw new Exception(ee.ToString());
}
} /// <summary>
/// 获取指定文件夹下所有子目录及文件
/// </summary>
/// <param name="path">详细路径</param>
public static string GetFoldAll(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException(path);
}
var str =string.Empty;
var thisOne = new DirectoryInfo(path);
str = ListTreeShow(thisOne, , str);
return str; } /// <summary>
/// 获取指定文件夹下所有子目录及文件函数
/// </summary>
/// <param name="theDir">指定目录</param>
/// <param name="nLevel">默认起始值,调用时,一般为0</param>
/// <param name="rn">用于迭加的传入值,一般为空</param>
/// <returns></returns>
public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string rn)
{
if (theDir == null)
{
throw new ArgumentNullException("theDir");
}
//获得目录
DirectoryInfo[] subDirectories = theDir.GetDirectories();
foreach (DirectoryInfo dirinfo in subDirectories)
{ if (nLevel == )
{
rn += "├";
}
else
{
var s =string.Empty;
for (int i = ; i <= nLevel; i++)
{
s += "│ ";
}
rn += s + "├";
}
rn += "<b>" + dirinfo.Name + "</b><br />";
//目录下的文件
var fileInfo = dirinfo.GetFiles();
foreach (FileInfo fInfo in fileInfo)
{
if (nLevel == )
{
rn += "│ ├";
}
else
{
var f = string.Empty;
for (int i = ; i <= nLevel; i++)
{
f += "│ ";
}
rn += f + "│ ├";
}
rn += fInfo.Name.ToString() + " <br />";
}
rn = ListTreeShow(dirinfo, nLevel + , rn); }
return rn;
} /// <summary>
/// 获取指定文件夹下所有子目录及文件(下拉框形)
/// </summary>
/// <param name="path">详细路径</param>
///<param name="dropName">下拉列表名称</param>
///<param name="tplPath">默认选择模板名称</param>
public static string GetFoldAll(string path, string dropName, string tplPath)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException(path);
}
if (string.IsNullOrEmpty(tplPath))
{
throw new ArgumentNullException(tplPath);
}
var strDrop = "<select name=\"" + dropName + "\" id=\"" + dropName + "\"><option value=\"\">--请选择详细模板--</option>";
var str =string.Empty;
DirectoryInfo thisOne = new DirectoryInfo(path);
str = ListTreeShow(thisOne, , str, tplPath);
return strDrop + str + "</select>"; } /// <summary>
/// 获取指定文件夹下所有子目录及文件函数
/// </summary>
/// <param name="theDir">指定目录</param>
/// <param name="nLevel">默认起始值,调用时,一般为0</param>
/// <param name="rn">用于迭加的传入值,一般为空</param>
/// <param name="tplPath">默认选择模板名称</param>
/// <returns></returns>
public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string rn, string tplPath)
{
if (theDir == null)
{
throw new ArgumentNullException("theDir");
}
//获得目录
DirectoryInfo[] subDirectories = theDir.GetDirectories();
foreach (DirectoryInfo dirinfo in subDirectories)
{
rn += "<option value=\"" + dirinfo.Name + "\"";
if (string.Equals(tplPath, dirinfo.Name, StringComparison.CurrentCultureIgnoreCase))
{
rn += " selected ";
}
rn += ">"; if (nLevel == )
{
rn += "┣";
}
else
{
string s = string.Empty;
for (int i = ; i <= nLevel; i++)
{
s += "│ ";
}
rn += s + "┣";
}
rn += "" + dirinfo.Name + "</option>";
//目录下的文件
FileInfo[] fileInfo = dirinfo.GetFiles();
foreach (FileInfo fInfo in fileInfo)
{
rn += "<option value=\"" + dirinfo.Name + "/" + fInfo.Name + "\"";
if (string.Equals(tplPath, fInfo.Name, StringComparison.CurrentCultureIgnoreCase))
{
rn += " selected ";
}
rn += ">"; if (nLevel == )
{
rn += "│ ├";
}
else
{
string f = string.Empty;
for (int i = ; i <= nLevel; i++)
{
f += "│ ";
}
rn += f + "│ ├";
}
rn += fInfo.Name + "</option>";
}
rn = ListTreeShow(dirinfo, nLevel + , rn, tplPath);
}
return rn;
} /// <summary>
/// 获取文件夹大小
/// </summary>
/// <param name="dirPath">文件夹路径</param>
/// <returns></returns>
public static long GetDirectoryLength(string dirPath)
{
if (string.IsNullOrEmpty(dirPath))
{
throw new ArgumentNullException(dirPath);
}
if (!Directory.Exists(dirPath))
{
return ;
}
long len = ;
DirectoryInfo di = new DirectoryInfo(dirPath);
foreach (FileInfo fi in di.GetFiles())
{
len += fi.Length;
}
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > )
{
for (int i = ; i < dis.Length; i++)
{
len += GetDirectoryLength(dis[i].FullName);
}
}
return len;
} /// <summary>
/// 获取指定文件详细属性
/// </summary>
/// <param name="filePath">文件详细路径</param>
/// <returns></returns>
public static string GetFileAttibe(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
throw new ArgumentNullException(filePath);
}
var str = string.Empty;
FileInfo objFi = new FileInfo(filePath);
str += "详细路径:" + objFi.FullName + "<br>文件名称:" + objFi.Name + "<br>文件长度:" + objFi.Length + "字节<br>创建时间" + objFi.CreationTime.ToString() + "<br>最后访问时间:" + objFi.LastAccessTime.ToString() + "<br>修改时间:" + objFi.LastWriteTime.ToString() + "<br>所在目录:" + objFi.DirectoryName + "<br>扩展名:" + objFi.Extension;
return str;
}
(1).FileStream类GetAccessControl():检索文件的安全对象:
[SecuritySafeCritical]
public FileSecurity GetAccessControl()
{
if (this._handle.IsClosed)
{
__Error.FileNotOpen();
}
return new FileSecurity(this._handle, this._fileName, AccessControlSections.Group | AccessControlSections.Owner | AccessControlSections.Access);
} [SecurityCritical, SecurityPermission(SecurityAction.Assert, UnmanagedCode=true)]
internal FileSecurity(SafeFileHandle handle, string fullPath, AccessControlSections includeSections) : base(false, handle, includeSections, false)
{
if (fullPath != null)
{
new FileIOPermission(FileIOPermissionAccess.NoAccess, AccessControlActions.View, fullPath).Demand();
}
else
{
new FileIOPermission(PermissionState.Unrestricted).Demand();
}
}
(2).FileStream类SetAccessControl():保存设置。
[SecuritySafeCritical]
public void SetAccessControl(FileSecurity fileSecurity)
{
if (fileSecurity == null)
{
throw new ArgumentNullException("fileSecurity");
}
if (this._handle.IsClosed)
{
__Error.FileNotOpen();
}
fileSecurity.Persist(this._handle, this._fileName);
}
3.文件共享操作实例:
/// <summary>
/// 共享文档操作
/// </summary>
public class FileSharingOperationHelper
{
public static bool ConnectState(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentNullException(path);
}
return ConnectState(path, "", "");
} /// <summary>
/// 连接远程共享文件夹
/// </summary>
/// <param name="path">远程共享文件夹的路径</param>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
/// <returns></returns>
public static bool ConnectState(string path, string userName, string passWord)
{
var proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
var dosLine = "net use " + path + " " + passWord + " /user:" + userName;
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
proc.WaitForExit();
}
var errormsg = proc.StandardError.ReadToEnd();
proc.StandardError.Close();
if (!string.IsNullOrEmpty(errormsg))
{
throw new Exception(errormsg);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
proc.Close();
proc.Dispose();
}
return true;
} /// <summary>
/// 向远程文件夹保存本地内容,或者从远程文件夹下载文件到本地
/// </summary>
/// <param name="src">要保存的文件的路径,如果保存文件到共享文件夹,这个路径就是本地文件路径如:@"D:\1.avi"</param>
/// <param name="dst">保存文件的路径,不含名称及扩展名</param>
/// <param name="fileName">保存文件的名称以及扩展名</param>
public static void Transport(string src, string dst, string fileName)
{
if (string.IsNullOrEmpty(src))
{
throw new ArgumentNullException(src);
}
if (string.IsNullOrEmpty(dst))
{
throw new ArgumentNullException(dst);
}
if (string.IsNullOrEmpty(fileName))
{
throw new ArgumentNullException(fileName);
}
FileStream inFileStream = null;
FileStream outFileStream = null;
try
{
inFileStream = new FileStream(src, FileMode.Open);
if (!Directory.Exists(dst))
{
Directory.CreateDirectory(dst);
}
dst = dst + fileName;
outFileStream = new FileStream(dst, FileMode.OpenOrCreate);
var buf = new byte[inFileStream.Length];
int byteCount;
while ((byteCount = inFileStream.Read(buf, , buf.Length)) > )
{
outFileStream.Write(buf, , byteCount);
}
}
catch (IOException ioex)
{
throw new IOException(ioex.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (inFileStream != null)
{
inFileStream.Flush();
inFileStream.Close();
}
if (outFileStream != null)
{
outFileStream.Flush();
outFileStream.Close();
}
}
}
}
4.文件彻底删除实例:
在.NET中提供了两种文件彻底的方法:
(1).调用系统API来完成这样的“粉碎”操作。
(2).在删除文件之前先删除文件的所有内容,然后在执行删除操作,被称为“假粉碎”。(此方法可以被人恢复文件,但是恢复的数据只是文件中的0)
/// <summary>
/// 粉碎文件操作
/// </summary>
public class KillFileHelper
{
/// <summary>
/// 强力粉碎文件,文件如果被打开,很难粉碎
/// </summary>
/// <param name="filename">文件全路径</param>
/// <param name="deleteCount">删除次数</param>
/// <param name="randomData">随机数据填充文件,默认true</param>
/// <param name="blanks">空白填充文件,默认false</param>
/// <returns>true:粉碎成功,false:粉碎失败</returns>
public static bool KillFile(string filename, int deleteCount, bool randomData = true, bool blanks = false)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
const int bufferLength = ;
var ret = true;
try
{
using (var stream = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
var f = new FileInfo(filename);
var count = f.Length;
long offset = ;
var rowDataBuffer = new byte[bufferLength];
while (count >= )
{
var iNumOfDataRead = stream.Read(rowDataBuffer, , bufferLength);
if (iNumOfDataRead == )
{
break;
}
if (randomData)
{
var randombyte = new Random();
randombyte.NextBytes(rowDataBuffer);
}
else if (blanks)
{
for (var i = ; i < iNumOfDataRead; i++)
rowDataBuffer[i] = ;
}
else
{
for (var i = ; i < iNumOfDataRead; i++)
rowDataBuffer[i] = Convert.ToByte(Convert.ToChar(deleteCount));
}
// 写新内容到文件。
for (var i = ; i < deleteCount; i++)
{
stream.Seek(offset, SeekOrigin.Begin);
stream.Write(rowDataBuffer, , iNumOfDataRead);
}
offset += iNumOfDataRead;
count -= iNumOfDataRead;
}
}
//每一个文件名字符代替随机数从0到9。
var newName = "";
do
{
var random = new Random();
var cleanName = Path.GetFileName(filename);
var dirName = Path.GetDirectoryName(filename);
var iMoreRandomLetters = random.Next();
// 为了更安全,不要只使用原文件名的大小,添加一些随机字母。
for (var i = ; i < cleanName.Length + iMoreRandomLetters; i++)
{
newName += random.Next().ToString();
}
newName = dirName + "\\" + newName;
} while (File.Exists(newName));
// 重命名文件的新的随机的名字。
File.Move(filename, newName);
File.Delete(newName);
}
catch
{
//可能其他原因删除失败了,使用我们自己的方法强制删除
var matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
try
{
//要检查被那个进程占用的文件
var fileName = filename;
var tool = new Process { StartInfo = { FileName = "handle.exe", Arguments = fileName + " /accepteula", UseShellExecute = false, RedirectStandardOutput = true } };
tool.Start();
tool.WaitForExit();
var outputTool = tool.StandardOutput.ReadToEnd();
foreach (Match match in Regex.Matches(outputTool, matchPattern))
{
//结束掉所有正在使用这个文件的程序
Process.GetProcessById(int.Parse(match.Value)).Kill();
}
File.Delete(fileName);
}
catch
{
ret = false;
}
}
return ret;
}
}
5.DotNet文件加密解密操作:
File和FileInfo类对文件加密进行了进一步的封装,提供了Encrypt和Decrypt方法用来对文件加密和解密。这两种方法要求文件系统必须为NFTS系统,对操作系统版本也要求必须是NT以上版本,使用该方法加密的文件,必须由同一用户才能进行解密。
(1).Encrypt():文件加密操作。
[SecuritySafeCritical]
public static void Encrypt(string path)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
string fullPathInternal = Path.GetFullPathInternal(path);
new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
if (!Win32Native.EncryptFile(fullPathInternal))
{
int errorCode = Marshal.GetLastWin32Error();
if (errorCode == )
{
DriveInfo info = new DriveInfo(Path.GetPathRoot(fullPathInternal));
if (!string.Equals("NTFS", info.DriveFormat))
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_EncryptionNeedsNTFS"));
}
}
__Error.WinIOError(errorCode, fullPathInternal);
}
}
(2).Decrypt():文件解密操作。
[SecuritySafeCritical]
public static void Decrypt(string path)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
string fullPathInternal = Path.GetFullPathInternal(path);
new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
if (!Win32Native.DecryptFile(fullPathInternal, ))
{
int errorCode = Marshal.GetLastWin32Error();
if (errorCode == )
{
DriveInfo info = new DriveInfo(Path.GetPathRoot(fullPathInternal));
if (!string.Equals("NTFS", info.DriveFormat))
{
throw new NotSupportedException(Environment.GetResourceString("NotSupported_EncryptionNeedsNTFS"));
}
}
__Error.WinIOError(errorCode, fullPathInternal);
}
}
.net 文件操作的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
- python 文件操作(转)
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
随机推荐
- HDU-4678 Mine 博弈SG函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678 题意就不说了,太长了... 这个应该算简单博弈吧.先求联通分量,把空白区域边上的数字个数全部求出 ...
- Java常用知识点
1. java不支持默认参数,需要用重载来实现 2. java中要比较字符串是否相等,不能用等号,要用equals函数来比较内容 3. 尽量避免使用try catch来捕获异常,可以使用if语句判断以 ...
- SQL2008--行号的得到
WITH DataTable AS( select *, ROW_NUMBER() OVER(order by ID) as Rowno from (select * from UserInfo) a ...
- emWin -- 模拟器系列1 - 如何建立模拟器开发环境
面对如此强大的emWin,大家是否都有跃跃欲试的冲动呢?但是没有硬件可以调试的童鞋,难道只能望洋兴叹?非也.非也.Segger公司早就考虑到了.Segger推出模拟器的目的不仅仅是为了解决没有硬件的烦 ...
- 【C++深入浅出】设计模式学习之单例模式
但凡成为大家公认的模式,都是有一些不可小觑的威力,今天分享一个简单的设计模式:单例模式. 单例模式用于一些只希望有一个实例的类或者只希望执行一次的操作:校长只能有一个.老板只能有一个.用户点击弹窗只希 ...
- 关于iOS中SQLITE句柄的使用的细节
1.设计思想:给SQLITE进行封装,利用定义的类别实现方法的简洁,以便达到低耦合效果 控制器代码: #import "ViewController.h" #import &quo ...
- 使用 Windows 窗体 TextBox 控件创建密码文本框
密码框是一种 Windows 窗体文本框,它在用户键入字符串时显示占位符. 创建密码文本框 将 TextBox 控件的 PasswordChar 属性设置为某个特定字符. PasswordChar 属 ...
- LetterView实现载入全国各地城市
近期更具eoe论坛上的letteView案例( eoe)自己做了一个LetterView载入全国城市的案例,欢迎大家互相学习和交流, 相对于eoe那个案例稍微修改了一下,利用json存储全国城市数 ...
- [Node.js] Creating Demo APIs with json-server
json-server makes it extremely easy to setup robust JSON apis to use for demos and proof of concepts ...
- python爬虫之採集——360联想词W2版本号
http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了对应的简单的方法做一个联想词的爬虫,并且还承诺了下面优化: 下一版本号的 ...