LaJiFenLei/Nirvana.Common/File/FileHelper.cs

173 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Nirvana.Common
{
public class FileHelper
{
public static IWebHostEnvironment _hostingEnvironment;
public FileHelper(IWebHostEnvironment environment)
{
_hostingEnvironment = environment;
}
/// <summary>
/// 获取文件的绝对路径,针对window程序和web程序都可使用
/// </summary>
/// <param name="relativePath">相对路径地址</param>
/// <returns></returns>
public static string GetAbsolutePath(string relativePath)
{
if (string.IsNullOrEmpty(relativePath))
{
throw new ArgumentNullException("参数relativePath空异常");
}
relativePath = relativePath.Replace("/", "\\");
if (relativePath[0] == '\\')
{
relativePath = relativePath.Remove(0, 1);
}
//判断是Web程序还是window程序
if (_hostingEnvironment != null)
{
return Path.Combine(_hostingEnvironment.WebRootPath, relativePath);
}
else
{
return Path.Combine(AppContext.BaseDirectory, relativePath);
}
}
#region
/// <summary>
/// 检测指定目录是否存在
/// </summary>
/// <param name="directoryPath">目录的绝对路径</param>
/// <returns></returns>
public static bool IsExistDirectory(string directoryPath)
{
return Directory.Exists(directoryPath);
}
#endregion
#region
/// <summary>
/// 删除文件
/// </summary>
/// <param name="file">要删除的文件路径和名称</param>
public static void DeleteFile(string file)
{
if (System.IO.File.Exists(file))
{
System.IO.File.Delete(file);
}
}
public static FileStream GetFileStream(string fileName)
{
FileStream fileStream = null;
if (!string.IsNullOrEmpty(fileName) && System.IO.File.Exists(fileName))
{
fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
}
return fileStream;
}
#endregion
/// <summary>
/// 读取文件(默认编码)
/// </summary>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static string Read(string path)
{
return Reads(path);
}
/// <summary>
/// 读取文件,指定编码
/// </summary>
/// <param name="path"></param>
/// <param name="encode"></param>
/// <returns></returns>
public static string Reads(string path,Encoding encode=null)
{
if(encode == null)
{
encode = Encoding.Default;
}
return Read(GetAbsolutePath(path), encode);
}
/// <summary>
/// 读取文件(指定编码)
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="encode">编码方式</param>
/// <returns></returns>
public static string Read(string path, Encoding encode)
{
FileStream fs = null;
for (int i = 0; i < 5; i++)
{
try
{
fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
break;
}
catch
{
System.Threading.Thread.Sleep(50);
}
}
if (fs == null) return "";
StreamReader sr = null;
try
{
sr = new StreamReader(fs, encode);
return sr.ReadToEnd();
}
catch (Exception)
{
// throw ex;
return "";
}
finally
{
sr.Close();
fs.Close();
}
}
/// <summary>
/// 返回文件行的数组
/// </summary>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static string[] ReadLines(string path)
{
return ReadLines(GetAbsolutePath(path), Encoding.Default);
}
/// <summary>
/// 返回文件行的数组
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="encode">编码方式</param>
/// <returns></returns>
public static string[] ReadLines(string path, Encoding encode)
{
try
{
return System.IO.File.ReadAllLines(path, encode);
}
catch (Exception)
{
// throw ex;
return null;
}
}
}
}