又是OOP的设计模式问题,请各位达人赐教!

前段时间写了个简单的文件操作类,但是总感觉这个设计模式不是很好,没有体现OOP的概念出来,想做先设计一个File对象,然后其他的对File的Action可以相继派生,不知道各位高手觉得如何?有没有必要呢?下面是源代码:
using System;
using System.IO;
using System.Globalization;

namespace LJF.Lib.Common.Utility
{
 /// <summary>
 /// some operation for file
 /// </summary>
 public class FileUtility
 {
  private static int counter = -1;

  private static Object tmpFileLock = new Object();

  /// <summary>
  /// Check Dir
  /// </summary>
  /// <param name="directory"></param>
  public static void CheckDir(String directory)
  {
   if (!Directory.Exists(directory))
   {
    Directory.CreateDirectory(directory);
   }
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="fileName"></param>
  /// <param name="directoryPath"></param>
  /// <returns></returns>
  public static FileInfo CreateUniqueFile(string fileName,string directoryPath)
  {
   if (fileName == null) throw new ArgumentNullException("File name cannot be empty.");
   if (directoryPath == null)throw new ArgumentNullException("Directory path cannot be empty");

   int index = fileName.LastIndexOf(".");

   if (index == -1) throw new Exception("Prefix too short.");

   string prefix = fileName.Substring(0,index);
   string suffix = fileName.Substring(index);

   return CreateUniqueFile(prefix,suffix,directoryPath);
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="prefix"></param>
  /// <param name="suffix"></param>
  /// <param name="directory"></param>
  /// <returns></returns>
  public static FileInfo CreateUniqueFile(string prefix, string suffix,string directory)
  {
   if (prefix == null)throw new Exception("");

   String s = (suffix == null) ? ".tmp" : suffix;
   lock (tmpFileLock)
   {
    FileInfo f;
    do
    {
     f = GenerateFile(prefix, s, directory);
    }while(f.Exists);
   
    return f;
   }
  }

  /// <summary>
  ///
  /// </summary>
  /// <param name="prefix"></param>
  /// <param name="suffix"></param>
  /// <param name="dir"></param>
  /// <returns></returns>
  private static FileInfo GenerateFile(string prefix,string suffix,string dir)
  {
   if (counter == -1)
   {
    counter = new Random().Next() & 0xffff;
   }
   counter ++;
   return new FileInfo(dir + prefix + counter.ToString() + suffix);

  }

  /// <summary>
  /// set the file's attributes writable
  /// </summary>
  /// <param name="filePath"></param>
  public static void ChangeFileAttributesToWritable(string filePath)
  {
   if (!File.Exists(filePath))
   {
    return;
   }
   FileAttributes attributes = File.GetAttributes(filePath);
   FileAttributes attr = attributes | FileAttributes.ReadOnly;
   if (attr == attributes)
   {
    attributes ^= FileAttributes.ReadOnly;
    File.SetAttributes(filePath, attributes);
   }
  }

  /// <summary>
  /// if the file is read only
  /// </summary>
  /// <param name="filePath"></param>
  /// <returns></returns>
  public static bool IsFileReadOnly(string filePath)
  {
   if (!File.Exists(filePath))
   {
    return false;
   }
   FileAttributes attributes = File.GetAttributes(filePath);
   FileAttributes attr = attributes | FileAttributes.ReadOnly;
   if (attr == attributes)
   {
    return true;
   }
   return false;
  }

  /// <summary>
  /// get a file as base64 string
  /// </summary>
  /// <param name="inputStream"></param>
  /// <returns></returns>
  public static string GetBase64FromStream(Stream inputStream)
  {
   int Count = 0;
   byte[] b = new byte[inputStream.Length] ;
   while(Count < inputStream.Length-1)
   {
    int RealCount = inputStream.Read(b,Count,1024);
    Count = Count+RealCount;
   }
   inputStream.Flush();
   inputStream.Close();
   string strContent = Convert.ToBase64String(b);
   return strContent;
  }

  /// <summary>
  /// Get a string can be a file name, creat by date time now
  /// </summary>
  /// <returns></returns>
  public static string GetFileNameByDateTimeNow()
  {
   return DateTime.Now.ToString("yyyyMMdd_HHmmss_fffffff", DateTimeFormatInfo.InvariantInfo);
  }

  /// <summary>
  /// get the file name by path.
  /// </summary>
  /// <param name="path"></param>
  /// <returns></returns>
  public string GetFileName(string path)
  {
   return System.IO.Path.GetFileName(path);
  }

  /// <summary>
  /// get the file name with out extension by path
  /// </summary>
  /// <param name="path"></param>
  /// <returns></returns>
  public string GetFileNameWithoutExtension(string path)
  {
   return System.IO.Path.GetFileNameWithoutExtension(path);
  }

  /// <summary>
  /// get the file's extension by path
  /// </summary>
  /// <param name="path"></param>
  /// <returns></returns>
  public string GetFileNameExtension(string path)
  {
   return System.IO.Path.GetExtension(path);
  }
 }//end class
}

转载于:https://www.cnblogs.com/FlyEagle/archive/2005/08/23/221028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值