(C#)常用类(文件名提取、文件路径提取、后缀名提取、数字转中文、数字转


using System;
using System.Collections.Generic;
using System.Text;

 namespace  

{

class Util
{
/*-----------------------------------------------------
* 文件夹路径的格式为
* C:\Program Files\Common
* 最后是不加\号的
-----------------------------------------------------*/

/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <param name="filePath">返回文件路径</param>
/// <param name="fileName">返回不带反缀名的文件名</param>
/// <param name="fileType">返回带.的后缀名</param>
internal static void GetFile( string fileAllName , out string filePath , out string fileName , out string fileType )//得到全部
{
filePath = fileAllName.Substring (0 , fileAllName.LastIndexOf ('\\')) + "\\";//在私有变量里存储源文件路径
fileName = fileAllName.Substring (fileAllName.LastIndexOf ('\\') + 1 , fileAllName.LastIndexOf ('.') - fileAllName.LastIndexOf ('\\') - 1);//在私有变量里存储源文件名
fileType = fileAllName.Substring (fileAllName.LastIndexOf ('.'));//在私有变量里存储源文件类型
}

/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <param name="fileName">返回不带反缀名的文件名</param>
internal static void GetName( string fileAllName , out string fileName )//得到文件名
{
fileName = fileAllName.Substring (fileAllName.LastIndexOf ('\\') + 1 , fileAllName.LastIndexOf ('.') - fileAllName.LastIndexOf ('\\') - 1);//在私有变量里存储源文件名
}

/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <returns></returns>
internal static string GetName( string fileAllName )//得到文件名
{
return fileAllName.Substring (fileAllName.LastIndexOf ('\\') + 1 , fileAllName.LastIndexOf ('.') - fileAllName.LastIndexOf ('\\') - 1);//在私有变量里存储源文件名
}

/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <param name="fileType">返回带.的后缀名</param>
internal static void GetType( string fileAllName , out string fileType )//得到文件类型
{
fileType = fileAllName.Substring (fileAllName.LastIndexOf ('.'));//在私有变量里存储源文件类型
}


/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <returns></returns>
internal static string GetType( string fileAllName )//得到文件类型
{
return fileAllName.Substring (fileAllName.LastIndexOf ('.'));//在私有变量里存储源文件类型
}


/// <summary>
///
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <param name="filePath">返回文件路径</param>
internal static void GetPath( string fileAllName , out string filePath )//得到文件路径
{
filePath = fileAllName.Substring (0 , fileAllName.LastIndexOf ('\\')) + "\\";//在私有变量里存储源文件路径
}



/// <summary>
/// 得到文件路径
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <returns>文件路径</returns>
internal static string GetPath( string fileAllName )//得到文件路径
{
return fileAllName.Substring (0 , fileAllName.LastIndexOf ('\\')) + "\\";//在私有变量里存储源文件路径
}



/// <summary>
/// 得到文件名和类型
/// </summary>
/// <param name="fileAllName">带文件名和后缀的全路径</param>
/// <param name="fileName">返回不带反缀名的文件名</param>
/// <param name="fileType">返回带.的后缀名</param>
internal static void GetNameAndType( string fileAllName , out string fileName , out string fileType )//得到文件名和类型
{
fileName = fileAllName.Substring (fileAllName.LastIndexOf ('\\') + 1 , fileAllName.LastIndexOf ('.') - fileAllName.LastIndexOf ('\\') - 1);//在私有变量里存储源文件名
fileType = fileAllName.Substring (fileAllName.LastIndexOf ('.'));//在私有变量里存储源文件类型
}


/// <summary>
/// 得到目录名
/// </summary>
/// <param name="directory">目录总路径</param>
/// <returns>返回目录名</returns>
internal static string GetDirectoryName( string directory )//得到目录名
{
string outDirectory;
if( directory.Length - 1 == directory.LastIndexOf ('\\') )//如果是根目录
{
outDirectory = directory.Substring (0 , directory.LastIndexOf (":")) + "盘";//如果是D盘,则返回D
}
else
{
outDirectory = directory.Substring (directory.LastIndexOf ('\\') + 1);//在私有变量里存储源文件名
}
return outDirectory;
}




/// <summary>
///思路非常简单,且没有任何位数限制!
///例如: 401,0103,1013
///读作: 肆佰零壹[亿]零壹佰零叁[万]壹仟零壹拾叁
///咱们先按每四位一组 从左到右,高位到低位分别"大声朗读"一下:
///"肆佰零壹" 单位是: "[亿]"
///"壹佰零叁" 单位是: "[万]"
///"壹仟零壹拾叁" 单位是 "" (相当于没有单位)
///很容易发现,每四位: 只有 千位,百位,十位,个位 这四种情况!
///我们把 [万],[亿] 当作单位就可以了!
///这就是规律了!简单吧!
///依据该思路,只用区区不到 50 行代码就可以搞定:
///只要你能够提供足够多的"单位"
///任何天文数字都可以正确转换!
/// </summary>
/// <param name="num">阿拉伯数字</param>
/// <returns>返回格式化好的字符串</returns>
internal static string ConvertNumberToChinese( string num )
{
//数字 数组
string[] cnNum = new string[] { "零" , "一" , "二" , "三" , "四" , "五" , "六" , "七" , "八" , "九" };
//位 数组
string[] cnSBQ = new string[] { "" , "拾" , "佰" , "仟" };
//单位 数组
string[] cnWY = new string[] { "" , "[万]" , "[亿]" , "[万亿]" };
string sRetun = ""; //返回值
int pos = 0; //字符位置指针
int mo = num.Length % 4; //取模

// 四位一组得到组数
int zuShu = ( mo > 0 ? num.Length / 4 + 1 : num.Length / 4 );

// 外层循环在所有组中循环
// 从左到右 高位到低位 四位一组 逐组处理
// 每组最后加上一个单位: "[万亿]","[亿]","[万]"
for( int i = zuShu ; i > 0 ; i-- )
{
int weiShu = 4;//四位一组
if( i == zuShu && mo != 0 )//如果是最前面一组(最大的一组),并且模不等于0
{
weiShu = mo;//最前面一组时,取模
}
// 得到一组四位数 最高位组有可能不足四位
string tempStrings = num.Substring (pos , weiShu);
int sLength = tempStrings.Length;

// 内层循环在该组中的每一位数上循环 从左到右 高位到低位
for( int j = 0 ; j < sLength ; j++ )
{
//处理改组中的每一位数加上所在位: "仟","佰","拾",""(个)
int n = Convert.ToInt32 (tempStrings.Substring (j , 1));
if( n == 0 )
{
if( j < sLength - 1
&& Convert.ToInt32 (tempStrings.Substring (j + 1 , 1)) > 0
&& !sRetun.EndsWith (cnNum[ n ]) )//如果该0不是该组数字最后一位 并且 前一位大于0 并且 不是全部数字最后一位
{
sRetun += cnNum[ n ];
}
}
else
{
//处理 1013 一千零"十三", 1113 一千一百"一十三"
if( !( n == 1 && ( sRetun.EndsWith (cnNum[ 0 ]) | sRetun.Length == 0 ) && j == sLength - 2 ) )//非(如果该数是1 且 是第一次运算 或者 返回数的长度为0) 且 该数是第二位
{
sRetun += cnNum[ n ];
}
sRetun += cnSBQ[ sLength - j - 1 ];
}
}
pos += weiShu;
// 每组最后加上一个单位: [万],[亿] 等
if( i < zuShu ) //不是最高位的一组
{
if( Convert.ToInt32 (tempStrings) != 0 )
{
//如果所有 4 位不全是 0 则加上单位 [万],[亿] 等
sRetun += cnWY[ i - 1 ];
}
}
else
{
//处理最高位的一组,最后必须加上单位
sRetun += cnWY[ i - 1 ];
}
}
return sRetun;
}

/// <summary>
/// 数字转中文
/// </summary>
/// <param name="num">数字</param>
/// <param name="cnNum">中文或其它语言的数组(如:one,two,three,four。。。)</param>
/// <param name="cnSBQ">十百千数组(原理同上)</param>
/// <param name="cnWY">万、亿数组(这样就支持任何语言了。例:萬、億)</param>
/// <returns>返回格式化好的字符串</returns>
internal static string ConvertNumberToChinese( string num , string[] cnNum , string[] cnSBQ , string[] cnWY )
{
string sRetun = ""; //返回值
int pos = 0; //字符位置指针
int mo = num.Length % 4; //取模

// 四位一组得到组数
int zuShu = ( mo > 0 ? num.Length / 4 + 1 : num.Length / 4 );

// 外层循环在所有组中循环
// 从左到右 高位到低位 四位一组 逐组处理
// 每组最后加上一个单位: "[万亿]","[亿]","[万]"
for( int i = zuShu ; i > 0 ; i-- )
{
int weiShu = 4;//四位一组
if( i == zuShu && mo != 0 )//如果是最前面一组(最大的一组),并且模不等于0
{
weiShu = mo;//最前面一组时,取模
}
// 得到一组四位数 最高位组有可能不足四位
string tempStrings = num.Substring (pos , weiShu);
int sLength = tempStrings.Length;

// 内层循环在该组中的每一位数上循环 从左到右 高位到低位
for( int j = 0 ; j < sLength ; j++ )
{
//处理改组中的每一位数加上所在位: "仟","佰","拾",""(个)
int n = Convert.ToInt32 (tempStrings.Substring (j , 1));
if( n == 0 )
{
if( j < sLength - 1
&& Convert.ToInt32 (tempStrings.Substring (j + 1 , 1)) > 0
&& !sRetun.EndsWith (cnNum[ n ]) )//如果该0不是该组数字最后一位 并且 前一位大于0 并且 不是全部数字最后一位
{
sRetun += cnNum[ n ];
}
}
else
{
//处理 1013 一千零"十三", 1113 一千一百"一十三"
if( !( n == 1 && ( sRetun.EndsWith (cnNum[ 0 ]) | sRetun.Length == 0 ) && j == sLength - 2 ) )//非(如果该数是1 且 是第一次运算 或者 返回数的长度为0) 且 该数是第二位
{
sRetun += cnNum[ n ];
}
sRetun += cnSBQ[ sLength - j - 1 ];
}
}
pos += weiShu;
// 每组最后加上一个单位: [万],[亿] 等
if( i < zuShu ) //不是最高位的一组
{
if( Convert.ToInt32 (tempStrings) != 0 )
{
//如果所有 4 位不全是 0 则加上单位 [万],[亿] 等
sRetun += cnWY[ i - 1 ];
}
}
else
{
//处理最高位的一组,最后必须加上单位
sRetun += cnWY[ i - 1 ];
}
}
return sRetun;
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值