directory.getfiles(Directory.GetFiles)
一、C# Directory的问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Example
{
class Program
{
static void Main(string[] args)
{
////////////////文件打开下面的代码打开D:\wang.txt文件,并且向文件中写入"hello"
FileStream textFile= File.Open(@"D:\wang.txt", FileMode.Append);//以Append方式打开文件(如果不存在,会创建)
byte[] info={(byte)'h',(byte)'e',(byte)'l',(byte)'l',(byte)'o'};//要写入的信息
textFile.Write(info, 0, info.Length);//Write方法只能写入byte数组
textFile.Close();//关闭文件流
//////////////////////文件创建
FileStream newText= File.Create(@"D:\newText.txt");//创建文件
newText.Close();//关闭文件
////////////////////删除文件
File.Delete(@"d:\newText.txt");
//////////////////文件复制如果目标文件存在,不允许复制(就是不能覆盖同名文件)
//File.Copy(@"d:\wang.txt",@"d:\CopyWang.txt");
////////////////文件移动只能在同一个盘中移动如果目标路径不正确,不能移动
// File.Move(@"d:\CopyWang.txt",@"D:\A\movewang.txt");
////////////////////////设置文件属性为只读,隐藏
//File.SetAttributes(@"D:\copywang.txt", FileAttributes.ReadOnly| FileAttributes.Hidden);//同时满足多个属性,必须用位或(|).
///////////////判断文件是不是存在
if(File.Exists(@"D:\copywang.txt"))//如果存在即便是隐藏的文件也可以找到
{
File.SetAttributes(@"D:\copywang.txt", FileAttributes.ReadOnly);//重新设置属性后,隐藏的文件也会显示出来,只要不加Hidden属性
Console.WriteLine("找到文件copywang.txt");
}
else
{
Console.WriteLine("没有找到文件CopyWang.txt");
}
/*
此外,File类对于Text文本提供了更多的支持。
?AppendText:将文本追加到现有文件
?CreateText:为写入文本创建或打开新文件
?OpenText:打开现有文本文件以进行读取
但上述方法主要对UTF-8的编码文本进行操作,从而显得不够灵活。在这里推荐读者使用下面的代码对txt文件进行操作。
?对txt文件进行“读”操作,示例代码如下:
*/
StreamReader textReader= new StreamReader(@"D:\wang.txt", System.Text.Encoding.Default);//以默认编码方式打开文件
string str= textReader.ReadToEnd();//读取文件
Console.WriteLine("使用StreamReader读取文本内容:"+ str);
textReader.Close();
//////////////////对txt文件写内容
StreamWriter textWriter= new StreamWriter(@"D:\wang.txt");
str="Learn.Net";
textWriter.Write(str);
textWriter.Close();
/*
System.IO.Directory类和System.DirectoryInfo类
主要提供关于目录的各种操作,使用时需要引用System.IO命名空间。下面通过程序实例来介绍其主要属性和方法。
*/
Directory.CreateDirectory(@"D:\wang1\wang");//创建目录(文件夹)如果已经存在,则保持;还可以一次创建多级目录
/////////////////////////////////目录属性设置方法
DirectoryInfo dirInfo= new DirectoryInfo(@"D:\wang1\wang");//
dirInfo.Attributes= FileAttributes.Hidden;//| FileAttributes.ReadOnly;//设置文件夹属性
/////////////////Delete方法的第二个参数为bool类型,它可以决定是否删除非空目录。
//如果该参数值为true,将删除整个目录,即使该目录下有文件或子目录;若为false,则仅当目录为空时才可删除。
//Directory.Delete(@"D:\wang1", true);//如果文件设置为ReadOnly,则不能删除
//Directory.Move(@"d:\wang1",@"d:\wang3");//把文件夹wang1移动到文件夹wang3中,相当于把wang1删除,创建一个wang3,再把内容移动到wang3
string[] Directories= Directory.GetDirectories(@"D:\wang3");//获得文件夹wang3的目录
foreach(string var in Directories)
Console.WriteLine(var);
string[] Files= Directory.GetFiles(@"D:\wang1");//获取文件夹wang1下面的所有文件
foreach(string var in Files)
Console.WriteLine(var);
if(Directory.Exists(@"D:\wang1"))
Console.WriteLine("文件夹wang1存在");
/*
在C#中“\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“\”。
所以上面的路径在C#中应该表示为“Book”,@“\Tmp\Book”,@“C:\Tmp\Book”。
*/
Console.ReadLine();
}
}
}
二、求高手详解下.net Directory类
.NET中处理文件和文件夹的操作相关的类:File类和Directory类
在设计和实现“网络硬盘”的过程中,将大量地使用和文件系统操作相关的内容。故本节先对和文件系统相关的两个.NET类进行简要介绍。System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间。下面通过程序实例来介绍其主要属性和方法。(1)文件打开方法:File.Open
public static FileStream Open(string path,FileMode mode)
下面的代码打开存放在c:\tempuploads目录下名称为newFile.txt文件,并在该文件中写入hello。private void OpenFile()
{
FileStream.TextFile=File.Open(@"c:\tempuploads\newFile.txt",FileMode.Append);
byte [] Info={(byte)''h'',(byte)''e'',(byte)''l'',(byte)''l'',(byte)''o''};
TextFile.Write(Info,0,Info.Length);
TextFile.Close();
}
(2)文件创建方法:File.Create该方法的声明如下:public static FileStream Create(string path;)
下面的代码演示如何在c:\tempuploads下创建名为newFile.txt的文件。由于File.Create方法默认向所有用户授予对新文件的完全读/写访问权限,所以文件是用读/写访问权限打开的,必须关闭后才能由其他应用程序打开。为此,所以需要使用FileStream类的Close方法将所创建的文件关闭。private void MakeFile()
{
FileStream NewText=File.Create(@"c:\tempuploads\newFile.txt");
NewText.Close();
}
(3)文件删除方法:File.Delete该方法声明如下:
public static void Delete(string path);
下面的代码演示如何删除c:\tempuploads目录下的newFile.txt文件。private void DeleteFile()
{
File.Delete(@"c:\tempuploads\newFile.txt");
}
(4)文件复制方法:File.Copy该方法声明如下:public static void Copy(string sourceFileName,string destFileName,bool overwrite);
下面的代码将c:\tempuploads\newFile.txt复制到c:\tempuploads\BackUp.txt。由于Cope方法的OverWrite参数设为true,所以如果BackUp.txt文件已存在的话,将会被复制过去的文件所覆盖。private void CopyFile()
{
File.Copy(@"c:\tempuploads\newFile.txt",@"c:\tempuploads\BackUp.txt",true);
}
(5)文件移动方法:File.Move该方法声明如下:public static void Move(string sourceFileName,string destFileName);
下面的代码可以将c:\tempuploads下的BackUp.txt文件移动到c盘根目录下。注意:只能在同一个逻辑盘下进行文件转移。如果试图将c盘下的文件转移到d盘,将发生错误。private void MoveFile()
{
File.Move(@"c:\tempuploads\BackUp.txt",@"c:\BackUp.txt");
}
(6)设置文件属性方法:File.SetAttributes该方法声明如下:public static void SetAttributes(string path,FileAttributes fileAttributes);
下面的代码可以设置文件c:\tempuploads\newFile.txt的属性为只读、隐藏。private void SetFile()
{
File.SetAttributes(@"c:\tempuploads\newFile.txt",
FileAttributes.ReadOnly|FileAttributes.Hidden);
}文件除了常用的只读和隐藏属性外,还有Archive(文件存档状态),System(系统文件),Temporary(临时文件)等。关于文件属性的详细情况请参看MSDN中FileAttributes的描述。(7)判断文件是否存在的方法:File.Exist该方法声明如下:public static bool Exists(string path);
下面的代码判断是否存在c:\tempuploads\newFile.txt文件。若存在,先复制该文件,然后其删除,最后将复制的文件移动;若不存在,则先创建该文件,然后打开该文件并进行写入操作,最后将文件属性设为只读、隐藏。if(File.Exists(@"c:\tempuploads\newFile.txt"))//判断文件是否存在
{
CopyFile();//复制文件
DeleteFile();//删除文件
MoveFile();//移动文件
}
else
{
MakeFile();//生成文件
OpenFile();//打开文件
SetFile();//设置文件属性
}
此外,File类对于Text文本提供了更多的支持。· AppendText:将文本追加到现有文件· CreateText:为写入文本创建或打开新文件· OpenText:打开现有文本文件以进行读取但上述方法主要对UTF-8的编码文本进行操作,从而显得不够灵活。在这里推荐读者使用下面的代码对txt文件进行操作。·对txt文件进行“读”操作,示例代码如下:StreamReader TxtReader= new StreamReader(@"c:\tempuploads\newFile.txt",System.Text.Encoding.Default);
string FileContent;
FileContent= TxtReader.ReadEnd();
TxtReader.Close();
·对txt文件进行“写”操作,示例代码如下:StreamWriter= new StreamWrite(@"c:\tempuploads\newFile.txt",System.Text.Encoding.Default);
string FileContent;
TxtWriter.Write(FileContent);
TxtWriter.Close();
System.IO.Directory类和System.DirectoryInfo类主要提供关于目录的各种操作,使用时需要引用System.IO命名空间。下面通过程序实例来介绍其主要属性和方法。(1)目录创建方法:Directory.CreateDirectory该方法声明如下:public static DirectoryInfo CreateDirectory(string path);
下面的代码演示在c:\tempuploads文件夹下创建名为NewDirectory的目录private void MakeDirectory()
{
Directory.CreateDirectory(@"c:\tempuploads\NewDirectoty");
}
(2)目录属性设置方法:DirectoryInfo.Atttributes下面的代码设置c:\tempuploads\NewDirectory目录为只读、隐藏。与文件属性相同,目录属性也是使用FileAttributes来进行设置的。private void SetDirectory()
{
DirectoryInfo NewDirInfo= new DirectoryInfo(@"c:\tempuploads\NewDirectoty");
NewDirInfo.Atttributes= FileAttributes.ReadOnly|FileAttributes.Hidden;
}
(3)目录删除方法:Directory.Delete该方法声明如下:public static void Delete(string path,bool recursive);下面的代码可以将c:\tempuploads\BackUp目录删除。Delete方法的第二个参数为bool类型,它可以决定是否删除非空目录。如果该参数值为true,将删除整个目录,即使该目录下有文件或子目录;若为false,则仅当目录为空时才可删除。private void DeleteDirectory()
{
Directory.Delete(@"c:\tempuploads\BackUp",true);
}
(4)目录移动方法:Directory.Move该方法声明如下:public static void Move(string sourceDirName,string destDirName);
下面的代码将目录c:\tempuploads\NewDirectory移动到c:\tempuploads\BackUp。private void MoveDirectory()
{
File.Move(@"c:\tempuploads\NewDirectory",@"c:\tempuploads\BackUp");
}
(5)获取当前目录下的所有子目录方法:Directory.GetDirectories该方法声明如下:public static string[] GetDirectories(string path;);下面的代码读出c:\tempuploads\目录下的所有子目录,并将其存储到字符串数组中。private void GetDirectory()
{
string [] Directorys;
Directorys= Directory. GetDirectories(@"c:\tempuploads");
}(6)获取当前目录下的所有文件方法:Directory.GetFiles该方法声明如下:public static string[] GetFiles(string path;);
下面的代码读出c:\tempuploads\目录下的所有文件,并将其存储到字符串数组中。private void GetFile()
{
string [] Files;
Files= Directory. GetFiles(@"c:\tempuploads",);
}
(7)判断目录是否存在方法:Directory.Exist该方法声明如下:public static bool Exists(
string path;
);
下面的代码判断是否存在c:\tempuploads\NewDirectory目录。若存在,先获取该目录下的子目录和文件,然后其移动,最后将移动后的目录删除。若不存在,则先创建该目录,然后将目录属性设为只读、隐藏。if(File.Exists(@"c:\tempuploads\NewDirectory"))//判断目录是否存在
{
GetDirectory();//获取子目录
GetFile();//获取文件
MoveDirectory();//移动目录
DeleteDirectory();//删除目录
}
else
{
MakeDirectory();//生成目录
SetDirectory();//设置目录属性
}
和文件有关的就这2个最重要了.
三、GetFiles()怎样读取多种格式文件
由于 getfiles()一次只能获到一种类型的文件,所以只能先获取到指定目录下的所有文件,再循环判断每个文件是否是要获
取的文件;假如获取指定目录下的所有视频文件,实现代码如下:
///<summary>
/// C#获取指定目录下多种指定类型文件
///</summary>
///<param name="filePath">路径</param>
private void GetVideoFiles(string filePath)
{
DirectoryInfo di= new DirectoryInfo(filePath);
FileInfo[] afi= di.GetFiles("*.*");
string fileName;
IList<string> list= new List<string>();
for(int i= 0; i< afi.Length; i++)
{
fileName= afi[i].Name.ToLower();
if(fileName.EndsWith(".rmvb")|| fileName.EndsWith(".rm")|| fileName.EndsWith(".avi")||
fileName.EndsWith(".mp4"))
{
list.Add(fileName);
}
}
}
如果不同类型的文件要求不同的操作,把并列的条件改 if(){} else if(){}或 switch语句即可。
调用方法:GetVideoFiles(@"G:\xq\test");