×

C#文件操作大全

Kalet Kalet 发表于2023-02-28 19:46:42 浏览482 评论0

抢沙发发表评论

转自:

https://blog.csdn.net/qq_33285360/article/details/109266707

https://blog.csdn.net/yugui/article/details/127237144

https://blog.csdn.net/weixin_38252896/article/details/107136456

1.创建文件夹


//using System.IO;
Directory.CreateDirectory("D:\\123");

2.创建文件

//using System.IO;
File.Create("D:123.txt");

3.删除文件

//using System.IO;
File.Delete(%%1);

4.删除文件夹

//using System.IO;
Directory.Delete(%%1);

5.删除一个目录下所有的文件夹

//using System.IO;
foreach (string dirStr in Directory.GetDirectories(%%1))
{
DirectoryInfo dir = new DirectoryInfo(dirStr);
ArrayList folders=new ArrayList();
FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
for (int i = 0; i < folders.Count; i++)
{
FileInfo f = folders[i] as FileInfo;
if (f == null)
{
DirectoryInfo d = folders[i] as DirectoryInfo;
d.Delete();
}
}
}

6.清空文件夹

//using System.IO;
Directory.Delete(%%1,true);
Directory.CreateDirectory(%%1);

7.读取文件

7.1.操作系统默认编码

//using System.IO;
StreamReader s = File.OpenText(%%1);
string %%2 = null;
while ((%%2 = s.ReadLine()) != null){
%%3
}
s.Close();


7.2.UTF-8编码

/*
using System.IO;
using System.Text;
*/
StreamReader srfile = new StreamReader(%%1,Encoding.UTF8);
while ((String %%2 = srfile.ReadLine()) != null)
{
%%3
}
srfile.Close();



7.3.分块读取

/*
using System.IO;
using System.Text;
*/
try
{
FileStream fs=new FileStream(%%1,FileMode.Open,FileAccess.Read);
BinaryReader br=new BinaryReader(fs,new ASCIIEncoding());
byte[] chunk;
do
{
chunk=br.ReadBytes(10240);
if(chunk.Length>0)
{
%%2 //chunk,chunk.Length
}
}
while(chunk.Length>0);
fs.Close();
}
catch
{
//return -1;
}


8.写入文件

//using System.IO;
FileInfo f = new FileInfo(%%1);
StreamWriter w = f.CreateText();
w.WriteLine(%%2);
w.Flush();
w.Close();

9.写入随机文件
//using System.IO;
byte[] dataArray = new byte[100000];//new Random().NextBytes(dataArray);
using(FileStream FileStream = new FileStream(%%1, FileMode.Create)){
// Write the data to the file, byte by byte.
for(int i = 0; i < dataArray.Length; i++){
FileStream.WriteByte(dataArray[i]);
}
// Set the stream position to the beginning of the file.
FileStream.Seek(0, SeekOrigin.Begin);
// Read and verify the data.
for(int i = 0; i < FileStream.Length; i++){
if(dataArray[i] != FileStream.ReadByte()){
//写入数据错误
return;
}
}
//"数据流"+FileStream.Name+"已验证"
}


10.读取文件属性

//using System.IO;
FileInfo f = new FileInfo(%%1);//f.CreationTime,f.FullName
if((f.Attributes & FileAttributes.ReadOnly) != 0){
%%2
}
else{
%%3
}


11.写入属性

//using System.IO;
FileInfo f = new FileInfo(%%1);
//设置只读
f.Attributes = myFile.Attributes | FileAttributes.ReadOnly;
//设置可写
f.Attributes = myFile.Attributes & ~FileAttributes.ReadOnly;

12.枚举一个文件夹中的所有文件夹
//using System.IO;
foreach (string %%2 in Directory.GetDirectories(%%1)){
%%3
}
/*
DirectoryInfo dir = new DirectoryInfo(%%1);
FileInfo[] files = dir.GetFiles("*.*");
foreach(FileInfo %%2 in files){
%%3
}
*/


13.复制文件夹

/*
using System.IO;
using System.Collections;
*/
string path = (%%2.LastIndexOf(Path.DirectorySeparatorChar) == %%2.Length - 1) ? %%2 : %%2+Path.DirectorySeparatorChar;
string parent = Path.GetDirectoryName(%%1);
Directory.CreateDirectory(path + Path.GetFileName(%%1));
DirectoryInfo dir = new DirectoryInfo((%%1.LastIndexOf(Path.DirectorySeparatorChar) == %%1.Length - 1) ? %%1 : %%1 + Path.DirectorySeparatorChar);
FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
while (Folders.Count>0)
{
FileSystemInfo tmp = Folders.Dequeue();
FileInfo f = tmp as FileInfo;
if (f == null)
{
DirectoryInfo d = tmp as DirectoryInfo;
Directory.CreateDirectory(d.FullName.Replace((parent.LastIndexOf(Path.DirectorySeparatorChar) == parent.Length - 1) ? parent : parent + Path.DirectorySeparatorChar, path));
foreach (FileSystemInfo fi in d.GetFileSystemInfos())
{
Folders.Enqueue(fi);
}
}
else
{
f.CopyTo(f.FullName.Replace(parent, path));
}
}


14.复制目录下所有的文件夹到另一个文件夹下

/*
using System.IO;
using System.Collections;
*/
DirectoryInfo d = new DirectoryInfo(%%1);
foreach (DirectoryInfo dirs in d.GetDirectories())
{
Queue<FileSystemInfo> al = new Queue<FileSystemInfo>(dirs.GetFileSystemInfos());
while (al.Count > 0)
{
FileSystemInfo temp = al.Dequeue();
FileInfo file = temp as FileInfo;
if (file == null)
{
DirectoryInfo directory = temp as DirectoryInfo;
Directory.CreateDirectory(path + directory.Name);
foreach (FileSystemInfo fsi in directory.GetFileSystemInfos())
al.Enqueue(fsi);
}
else
File.Copy(file.FullName, path + file.Name);
}
}

15.移动文件夹

/*
using System.IO;
using System.Collections;
*/
string filename = Path.GetFileName(%%1);
string path=(%%2.LastIndexOf(Path.DirectorySeparatorChar) == %%2.Length - 1) ? %%2 : %%2 + Path.DirectorySeparatorChar;
if (Path.GetPathRoot(%%1) == Path.GetPathRoot(%%2))
Directory.Move(%%1, path + filename);
else
{
string parent = Path.GetDirectoryName(%%1);
Directory.CreateDirectory(path + Path.GetFileName(%%1));
DirectoryInfo dir = new DirectoryInfo((%%1.LastIndexOf(Path.DirectorySeparatorChar) == %%1.Length - 1) ? %%1 : %%1 + Path.DirectorySeparatorChar);
FileSystemInfo[] fileArr = dir.GetFileSystemInfos();
Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dir.GetFileSystemInfos());
while (Folders.Count > 0)
{
FileSystemInfo tmp = Folders.Dequeue();
FileInfo f = tmp as FileInfo;
if (f == null)
{
DirectoryInfo d = tmp as DirectoryInfo;
DirectoryInfo dpath = new DirectoryInfo(d.FullName.Replace((parent.LastIndexOf(Path.DirectorySeparatorChar) == parent.Length - 1) ? parent : parent + Path.DirectorySeparatorChar, path));
dpath.Create();
foreach (FileSystemInfo fi in d.GetFileSystemInfos())
{
Folders.Enqueue(fi);
}
}
else
{
f.MoveTo(f.FullName.Replace(parent, path));
}
}
Directory.Delete(%%1, true);
}


16.移动目录下所有的文件夹到另一个目录下

/*
using System.IO;
using System.Collections;
*/
string filename = Path.GetFileName(%%1);
if (Path.GetPathRoot(%%1) == Path.GetPathRoot(%%2))
foreach (string dir in Directory.GetDirectories(%%1))
Directory.Move(dir, Path.Combine(%%2,filename));
else
{
foreach (string dir2 in Directory.GetDirectories(%%1))
{
string parent = Path.GetDirectoryName(dir2);
Directory.CreateDirectory(Path.Combine(%%2, Path.GetFileName(dir2)));
string dir = (dir2.LastIndexOf(Path.DirectorySeparatorChar) == dir2.Length - 1) ? dir2 : dir2 + Path.DirectorySeparatorChar;
DirectoryInfo dirdir = new DirectoryInfo(dir);
FileSystemInfo[] fileArr = dirdir.GetFileSystemInfos();
Queue<FileSystemInfo> Folders = new Queue<FileSystemInfo>(dirdir.GetFileSystemInfos());
while (Folders.Count > 0)
{
FileSystemInfo tmp = Folders.Dequeue();
FileInfo f = tmp as FileInfo;
if (f == null)
{
DirectoryInfo d = tmp as DirectoryInfo;
DirectoryInfo dpath = new DirectoryInfo(d.FullName.Replace((parent.LastIndexOf(Path.DirectorySeparatorChar) == parent.Length - 1) ? parent : parent + Path.DirectorySeparatorChar, %%2));
dpath.Create();
foreach (FileSystemInfo fi in d.GetFileSystemInfos())
{
Folders.Enqueue(fi);
}
}
else
{
f.MoveTo(f.FullName.Replace(parent, %%2));
}
}
dirdir.Delete(true);
}
}



一、根据虚拟路径获取文件物理路径:

string savePath = Server.MapPath("~/Uploads/RemoteDatum/");
二、判断文件夹是否存在

   if (!System.IO.Directory.Exists(@"E:\Files")) 
      { 
          System.IO.Directory.CreateDirectory(@"E:\Files");//不存在就创建文件夹
  } 
三、判断文件是否存在

   if(File.Exists(@"E:\Files\test.txt")) 
    { 
        //存在 
    } 
    else 
    { 
      //不存在 


CreateDirectory():创建
Directory.CreateDirectory(@"D:\2");

Delete():删除
Directory.Delete(@"D:\1");

如果该文件夹是非空的,需要加上一个参数

Directory.Delete(@"D:\1",true);

Exists():判断是否存在
for (int i = 0; i < 100; ++i) {
if (Directory.Exists(@"D:\1")) {
Directory.CreateDirectory(@"D:\1\"+i);
}
}

GetFiles():获得全部文件的路径
string[] paths = Directory.GetFiles(@"D:\2");
for (int i = 0; i < paths.Length; ++i) {
Console.WriteLine(paths[i]);
}

这样可以获得该文件夹下全部文件的路径,但是如果想要获得相应格式的,可以加上格式:

string[] paths = Directory.GetFiles(@"D:\2","*.txt");
for (int i = 0; i < paths.Length; ++i) {
Console.WriteLine(paths[i]);
}

GetDirectories():获得全部文件夹的路径
string[] dirPaths = Directory.GetDirectories(@"D:\1");
for (int i = 0; i < dirPaths.Length; ++i) {
Console.WriteLine(dirPaths[i]);
    }

群贤毕至

访客