c#.net中怎么更改本地文件夹以及子文件件和文件的名称

c#.net中怎么更改本地文件夹以及子文件件和文件的名称,第1张

C#文件 *** 作方法大全

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的压缩算法不是开源的

)


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存