C#追加文件
StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt")
sw.WriteLine("追逐理想")
sw.WriteLine("kzlll")
sw.WriteLine(".NET笔记")
sw.Flush()
sw.Close()
C#拷贝文件
string OrignFile,NewFile
OrignFile = Server.MapPath(".")+"\\myText.txt"
NewFile = Server.MapPath(".")+"\\myTextCopy.txt"
File.Copy(OrignFile,NewFile,true)
C#删除文件
string delFile = Server.MapPath(".")+"\\myTextCopy.txt"
File.Delete(delFile)
C#移动文件
string OrignFile,NewFile
OrignFile = Server.MapPath(".")+"\\myText.txt"
NewFile = Server.MapPath(".")+"\\myTextCopy.txt"
File.Move(OrignFile,NewFile)
C#创建目录
// 创建目录c:\sixAge
DirectoryInfo d=Directory.CreateDirectory("c:\\sixAge")
// d1指向c:\sixAge\sixAge1
DirectoryInfo d1=d.CreateSubdirectory("sixAge1")
// d2指向c:\sixAge\sixAge1\sixAge1_1
DirectoryInfo d2=d1.CreateSubdirectory("sixAge1_1")
// 将当前目录设为c:\sixAge
Directory.SetCurrentDirectory("c:\\sixAge")
// 创建目录c:\sixAge\sixAge2
Directory.CreateDirectory("sixAge2")
// 创建目录c:\sixAge\sixAge2\sixAge2_1
Directory.CreateDirectory("sixAge2\\sixAge2_1")
递归删除文件夹及文件
<%@ Page Language=C#%>
<%@ Import namespace="System.IO"%>
<script_ runat=server>
public void DeleteFolder(string dir)
{
if (Directory.Exists(dir)) //如果存在这个文件夹删除之
{
foreach(string d in Directory.GetFileSystemEntries(dir))
{
if(File.Exists(d))
File.Delete(d)//直接删除其中的文件
else
DeleteFolder(d)//递归删除子文件夹
}
Directory.Delete(dir)//删除已空文件夹
Response.Write(dir+" 文件夹删除成功")
}
else
Response.Write(dir+" 该文件夹不存在")//如果文件夹不存在则提示
}
protected void Page_Load (Object sender ,EventArgs e)
{
string Dir="D:\\gbook\\11"
DeleteFolder(Dir)//调用函数删除文件夹
}
// ======================================================
// 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面
// 如果目标文件夹为只读属性就会报错。
// April 18April2005 In STU
// ======================================================
public static void CopyDir(string srcPath,string aimPath)
{
try
{
// 检查目标目录是否以目录分割字符结束如果不是则添加之
if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar)
aimPath += Path.DirectorySeparatorChar
// 判断目标目录是否存在如果不存在则新建之
if(!Directory.Exists(aimPath)) Directory.CreateDirectory(aimPath)
// 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
// 如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
// string[] fileList = Directory.GetFiles(srcPath)
string[] fileList = Directory.GetFileSystemEntries(srcPath)
// 遍历所有的文件和目录
foreach(string file in fileList)
{
// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
if(Directory.Exists(file))
CopyDir(file,aimPath+Path.GetFileName(file))
// 否则直接Copy文件
else
File.Copy(file,aimPath+Path.GetFileName(file),true)
}
}
catch (Exception e)
{
MessageBox.Show (e.ToString())
}
}
// ======================================================
// 实现一个静态方法将指定文件夹下面的所有内容Detele
// 测试的时候要小心 *** 作,删除之后无法恢复。
// April 18April2005 In STU
// ======================================================
public static void DeleteDir(string aimPath)
{
try
{
// 检查目标目录是否以目录分割字符结束如果不是则添加之
if(aimPath[aimPath.Length-1] != Path.DirectorySeparatorChar)
aimPath += Path.DirectorySeparatorChar
// 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组
// 如果你指向Delete目标文件下面的文件而不包含目录请使用下面的方法
// string[] fileList = Directory.GetFiles(aimPath)
string[] fileList = Directory.GetFileSystemEntries(aimPath)
// 遍历所有的文件和目录
foreach(string file in fileList)
{
// 先当作目录处理如果存在这个目录就递归Delete该目录下面的文件
if(Directory.Exists(file))
{
DeleteDir(aimPath+Path.GetFileName(file))
}
// 否则直接Delete文件
else
{
File.Delete (aimPath+Path.GetFileName(file))
}
}
//删除文件夹
System.IO .Directory .Delete (aimPath,true)
}
catch (Exception e)
{
MessageBox.Show (e.ToString())
}
}
需要引用命名空间:
using System.IO
/**//// <summary>
/// </summary>
/// <param ></param>
/// <param ></param>
//--------------------------------------------------
//---------------------------------------------------
public static void CopyFolder(string strFromPath,string strToPath)
{
//如果源文件夹不存在,则创建
if (!Directory.Exists(strFromPath))
{
Directory.CreateDirectory(strFromPath)
}
//取得要拷贝的文件夹名
string strFolderName = strFromPath.Substring(strFromPath.LastIndexOf("\\") + 1,strFromPath.Length - strFromPath.LastIndexOf("\\") - 1)
//如果目标文件夹中没有源文件夹则在目标文件夹中创建源文件夹
if (!Directory.Exists(strToPath + "\\" + strFolderName))
{
Directory.CreateDirectory(strToPath + "\\" + strFolderName)
}
//创建数组保存源文件夹下的文件名
string[] strFiles = Directory.GetFiles(strFromPath)
//循环拷贝文件
for(int i = 0i <strFiles.Lengthi++)
{
//取得拷贝的文件名,只取文件名,地址截掉。
string strFileName = strFiles[i].Substring(strFiles[i].LastIndexOf("\\") + 1,strFiles[i].Length - strFiles[i].LastIndexOf("\\") - 1)
//开始拷贝文件,true表示覆盖同名文件
File.Copy(strFiles[i],strToPath + "\\" + strFolderName + "\\" + strFileName,true)
}
//创建DirectoryInfo实例
DirectoryInfo dirInfo = new DirectoryInfo(strFromPath)
//取得源文件夹下的所有子文件夹名称
DirectoryInfo[] ZiPath = dirInfo.GetDirectories()
for (int j = 0j <ZiPath.Lengthj++)
{
//获取所有子文件夹名
string strZiPath = strFromPath + "\\" + ZiPath[j].ToString()
//把得到的子文件夹当成新的源文件夹,从头开始新一轮的拷贝
CopyFolder(strZiPath,strToPath + "\\" + strFolderName)
}
}
一.读取文本文件
/**//// <summary>
/// 读取文本文件
/// </summary>
private void ReadFromTxtFile()
{
if(filePath.PostedFile.FileName != "")
{
txtFilePath =filePath.PostedFile.FileName
fileExtName = txtFilePath.Substring(txtFilePath.LastIndexOf(".")+1,3)
if(fileExtName !="txt" &&fileExtName != "TXT")
{
Response.Write("请选择文本文件")
}
else
{
StreamReader fileStream = new StreamReader(txtFilePath,Encoding.Default)
txtContent.Text = fileStream.ReadToEnd()
fileStream.Close()
}
}
}
二.获取文件列表
1/**//// <summary>
2/// 获取文件列表
3/// </summary>
4private void GetFileList()
5{
6string strCurDir,FileName,FileExt
7
8/**////文件大小
9long FileSize
10
11/**////最后修改时间
12DateTime FileModify
13
14/**////初始化
15if(!IsPostBack)
16{
17/**////初始化时,默认为当前页面所在的目录
18strCurDir = Server.MapPath(".")
19lblCurDir.Text = strCurDir
20txtCurDir.Text = strCurDir
21}
22else
23{
24strCurDir = txtCurDir.Text
25txtCurDir.Text = strCurDir
26lblCurDir.Text = strCurDir
27}
28FileInfo fi
29DirectoryInfo dir
30TableCell td
31TableRow tr
32tr = new TableRow()
33
34/**////动态添加单元格内容
35td = new TableCell()
36td.Controls.Add(new LiteralControl("文件名"))
37tr.Cells.Add(td)
38td = new TableCell()
39td.Controls.Add(new LiteralControl("文件类型"))
40tr.Cells.Add(td)
41td = new TableCell()
42td.Controls.Add(new LiteralControl("文件大小"))
43tr.Cells.Add(td)
44td = new TableCell()
45td.Controls.Add(new LiteralControl("最后修改时间"))
46tr.Cells.Add(td)
47
48tableDirInfo.Rows.Add(tr)
49
50/**////针对当前目录建立目录引用对象
51DirectoryInfo dirInfo = new DirectoryInfo(txtCurDir.Text)
52
53/**////循环判断当前目录下的文件和目录
54foreach(FileSystemInfo fsi in dirInfo.GetFileSystemInfos())
55{
56FileName = ""
57FileExt = ""
58FileSize = 0
59
60/**////如果是文件
61if(fsi is FileInfo)
62{
63fi = (FileInfo)fsi
64
65/**////取得文件名
66FileName = fi.Name
67
68/**////取得文件的扩展名
69FileExt = fi.Extension
70
71/**////取得文件的大小
72FileSize = fi.Length
73
74/**////取得文件的最后修改时间
75FileModify = fi.LastWriteTime
76}
77
78/**////否则是目录
79else
80{
81dir = (DirectoryInfo)fsi
82
83/**////取得目录名
84FileName = dir.Name
85
86/**////取得目录的最后修改时间
87FileModify = dir.LastWriteTime
88
89/**////设置文件的扩展名为"文件夹"
90FileExt = "文件夹"
91}
92
93/**////动态添加表格内容
94tr = new TableRow()
95td = new TableCell()
96td.Controls.Add(new LiteralControl(FileName))
97tr.Cells.Add(td)
98td = new TableCell()
99td.Controls.Add(new LiteralControl(FileExt))
100tr.Cells.Add(td)
101td = new TableCell()
102td.Controls.Add(new LiteralControl(FileSize.ToString()+"字节"))
103tr.Cells.Add(td)
104td = new TableCell()
105td.Controls.Add(new LiteralControl(FileModify.ToString("yyyy-mm-dd hh:mm:ss")))
106tr.Cells.Add(td)
107tableDirInfo.Rows.Add(tr)
108}
109}
三.读取日志文件
1/**//// <summary>
2/// 读取日志文件
3/// </summary>
4private void ReadLogFile()
5{
6/**////从指定的目录以打开或者创建的形式读取日志文件
7FileStream fs = new FileStream(Server.MapPath("upedFile")+"\\logfile.txt", FileMode.OpenOrCreate, FileAccess.Read)
8
9/**////定义输出字符串
10StringBuilder output = new StringBuilder()
11
12/**////初始化该字符串的长度为0
13output.Length = 0
14
15/**////为上面创建的文件流创建读取数据流
16StreamReader read = new StreamReader(fs)
17
18/**////设置当前流的起始位置为文件流的起始点
19read.BaseStream.Seek(0, SeekOrigin.Begin)
20
21/**////读取文件
22while (read.Peek() >-1)
23{
24/**////取文件的一行内容并换行
25output.Append(read.ReadLine() + "\n")
26}
27
28/**////关闭释放读数据流
29read.Close()
30
31/**////返回读到的日志文件内容
32return output.ToString()
33}
四.写入日志文件
1/**//// <summary>
2/// 写入日志文件
3/// </summary>
4/// <param ></param>
5private void WriteLogFile(string input)
6{
7/**////指定日志文件的目录
8string fname = Server.MapPath("upedFile") + "\\logfile.txt"
9/**////定义文件信息对象
10FileInfo finfo = new FileInfo(fname)
11
12/**////判断文件是否存在以及是否大于2K
13if ( finfo.Exists &&finfo.Length >2048 )
14{
15/**////删除该文件
16finfo.Delete()
17}
18/**////创建只写文件流
19using(FileStream fs = finfo.OpenWrite())
20{
21/**////根据上面创建的文件流创建写数据流
22StreamWriter w = new StreamWriter(fs)
23
24/**////设置写数据流的起始位置为文件流的末尾
25w.BaseStream.Seek(0, SeekOrigin.End)
26
27 w.Write("\nLog Entry : ")
29
30/**////写入当前系统时间并换行
31w.Write("{0} {1} \r\n", DateTime.Now.ToLongTimeString(),
32DateTime.Now.ToLongDateString())
33
34/**////写入日志内容并换行
35w.Write(input + "\n")
36
37/**////写入------------------------------------“并换行
38w.Write("------------------------------------\n")
39
40/**////清空缓冲区内容,并把缓冲区内容写入基础流
41w.Flush()
42
43/**////关闭写数据流
44w.Close()
45}
46}
五.C#创建HTML文件
1/**//// <summary>
2/// 创建HTML文件
3/// </summary>
4private void CreateHtmlFile()
5{
6/**////定义和html标记数目一致的数组
7string[] newContent = new string[5]
8StringBuilder strhtml = new StringBuilder()
9try
10{
11/**////创建StreamReader对象
12using (StreamReader sr = new StreamReader(Server.MapPath("createHTML") + "\\template.html"))
13{
14String oneline
15
16/**////读取指定的HTML文件模板
17while ((oneline = sr.ReadLine()) != null)
18{
19strhtml.Append(oneline)
20}
21sr.Close()
22}
23}
24catch(Exception err)
25{
26/**////输出异常信息
27Response.Write(err.ToString())
28}
29/**////为标记数组赋值
30newContent[0] = txtTitle.Text//标题
31newContent[1] = "BackColor='#cccfff'"//背景色
32newContent[2] = "#ff0000"//字体颜色
33newContent[3] = "100px"//字体大小
34newContent[4] = txtContent.Text//主要内容
35
36/**////根据上面新的内容生成html文件
37try
38{
39/**////指定要生成的HTML文件
40string fname = Server.MapPath("createHTML") +"\\" + DateTime.Now.ToString("yyyymmddhhmmss") + ".html"
41
42/**////替换html模版文件里的标记为新的内容
43for(int i=0i <5i++)
44{
45strhtml.Replace("$htmlkey["+i+"]",newContent[i])
46}
47/**////创建文件信息对象
48FileInfo finfo = new FileInfo(fname)
49
50/**////以打开或者写入的形式创建文件流
51using(FileStream fs = finfo.OpenWrite())
52{
53/**////根据上面创建的文件流创建写数据流
54StreamWriter sw = new StreamWriter(fs,System.Text.Encoding.GetEncoding("GB2312"))
55
56/**////把新的内容写到创建的HTML页面中
57sw.WriteLine(strhtml)
58sw.Flush()
59sw.Close()
60}
61
62/**////设置超级链接的属性
63hyCreateFile.Text = DateTime.Now.ToString("yyyymmddhhmmss")+".html"
64hyCreateFile.NavigateUrl = "createHTML/"+DateTime.Now.ToString("yyyymmddhhmmss")+".html"
65}
66catch(Exception err)
67{
68Response.Write (err.ToString())
69}
70}
CreateDirectory方法的使用
using System
using System.IO
class Test
{
public static void Main()
{
// Specify the directory you want to manipulate.
string path = @"c:\MyDir"
try
{
// Determine whether the directory exists.
if (Directory.Exists(path))
{
Console.WriteLine("That path exists already.")
return
}
// Try to create the directory.
DirectoryInfo di = Directory.CreateDirectory(path)
Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path))
// Delete the directory.
di.Delete()
Console.WriteLine("The directory was deleted successfully.")
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString())
}
finally {}
}
}
楼主的这个问题可以说是C#的一个缺陷吧。System.IO.
Directory
.Move("D:\\a","D:\\aaa")
这种方式只要是该文件夹下有任何文件都会报错拒绝访问。
一般的解决方法是:目录copy,将拷贝到的目标地址设定成想要的文件名,然后删除原文件。
该方法在原文件夹下无
正在使用
的文件时是可行的。但是如果有文件正在使用,或者原文件比较大的话,处理起来也很麻烦。
最简单的解决方法:在
asp.net
中引用VB!
1.先在项目中添加引用:Microsoft.
VisualBasic
然后在所需使用的文档中加上using
Microsoft.VisualBasic.Devices
命名空间
2.就下面两行
Computer
MyComputer
=
new
Computer()
MyComputer.
FileSystem
.
RenameFile
(FileName,
newFileName)
其中FileName是你所要重命名的文件的全路径,newFileName仅仅是目标文件名;
使用第三方类型,可以下一个ICSharpCode.SharpZLib
,用法自己研究,其实就是在内存在解压,处理完后,再重新打包覆盖原文件(注:不能处理RAR,因为RAR的压缩算法不是开源的
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)