C#将指定目录所有文件名转换成小写的方法

 更新时间:2015年04月17日 15:38:17   作者:work24  
这篇文章主要介绍了C#将指定目录所有文件名转换成小写的方法,涉及C#中目录的遍历及filename.ToLowerInvariant方法的使用技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#将指定目录所有文件名转换成小写的方法。分享给大家供大家参考。具体如下:

using System;
using System.IO;
using System.Linq;
namespace RobvanderWoude
{
 class LoCase
 {
  static int Main( string[] args )
  {
   string dir = string.Empty;
   string filespec = string.Empty;
   char[] trailingbackslash = "\\".ToCharArray( 0, 1 );
   char[] upcaseletters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray( 0, 26 );
   bool verbose = false;
   #region Command Line Parsing
   switch ( args.Length )
   {
    case 0:
     return WriteError( string.Empty );
    case 1:
     filespec = args[0].Trim( '"' );
     break;
    case 2:
     filespec = args[0].Trim( '"' );
     if ( args[1].Substring( 0, 2 ).ToUpper( ) == "/V" )
     {
      verbose = true;
     }
     else
     {
      return WriteError( "Invalid command line switch: " + args[1] );
     }
     break;
    default:
     return WriteError( string.Empty );
   }
   if ( string.IsNullOrWhiteSpace( filespec ) || filespec == "/?" )
   {
    return WriteError( string.Empty );
   }
   if ( filespec.IndexOfAny( "/?".ToCharArray( 0, 2 ) ) != -1 )
   {
    return WriteError( "Invalid file specification: \"" + filespec + "\"" );
   }
   #endregion Command Line Parsing
   try
   {
    // Check if the directory exists
    try
    {
     dir = Path.GetDirectoryName( filespec );
     if ( string.IsNullOrWhiteSpace( dir ) )
     {
      dir = Path.GetFullPath( "." );
     }
     if ( !Directory.Exists( dir ) )
     {
      return WriteError( "Directory not found: \"" + dir + "\"" );
     }
     dir = dir.TrimEnd( trailingbackslash ) + "\\";
    }
    catch ( ArgumentException )
    {
     return WriteError( "Parent directory not found" );
    }
    // Extract the FILE specification (removing the path)
    string filenames = filespec.Substring( filespec.LastIndexOf( "\\" ) + 1 );
    // Enumerate the files
    string[] files = Directory.EnumerateFiles( dir, filenames ).ToArray<string>( );
    int count = 0;
    foreach ( string file in files )
    {
     if ( File.Exists( file ) )
     {
      string filename = Path.GetFileName( file );
      if ( filename.IndexOfAny( upcaseletters ) > -1 )
      {
       count++;
       string newfilename = dir + filename.ToLowerInvariant( );
       File.Move( file, newfilename );
      }
     }
    }
    if ( verbose )
    {
     Console.WriteLine( "{0} matching file{1} renamed", ( count == 0 ? "No" : count.ToString( ) ), ( count == 1 ? string.Empty : "s" ) );
    }
    return count;
   }
   catch ( Exception e )
   {
    return WriteError( e.Message );
   }
  }
  public static int WriteError( Exception e )
  {
   return WriteError( e == null ? null : e.Message );
  }
  public static int WriteError( string errorMessage )
  {
   if ( !string.IsNullOrWhiteSpace( errorMessage ) )
   {
    Console.Error.WriteLine( );
    Console.ForegroundColor = ConsoleColor.Red;
    Console.Error.Write( "ERROR: " );
    Console.ForegroundColor = ConsoleColor.White;
    Console.Error.WriteLine( errorMessage );
    Console.ResetColor( );
   }
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "LoCase.exe, Version 1.02" );
   Console.Error.WriteLine( "Rename specified files to all lower case" );
   Console.Error.WriteLine( );
   Console.Error.Write( "Usage: " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.WriteLine( "LoCase.exe filespec [ /Verbose ]" );
   Console.ResetColor( );
   Console.Error.WriteLine( );
   Console.Error.Write( "Where: " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "filespec" );
   Console.ResetColor( );
   Console.Error.WriteLine( " is (are) the file(s) to be renamed (wildcards allowed)" );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "   /V" );
   Console.ResetColor( );
   Console.Error.WriteLine( "erbose displays the number of files renamed" );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Note:  Use doublequotes if filespec contains spaces." );
   Console.Error.WriteLine( "   Return code (\"ErrorLevel\") equals the number of renamed files." );
   Console.Error.Write( "   Switch may be abbreviated, e.g. " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/V" );
   Console.ResetColor( );
   Console.Error.Write( " instead of " );
   Console.ForegroundColor = ConsoleColor.White;
   Console.Error.Write( "/V" );
   Console.ResetColor( );
   Console.Error.WriteLine( "erbose." );
   Console.Error.WriteLine( );
   Console.Error.WriteLine( "Written by Rob van der Woude" );
   return 0;
  }
 }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • C#的回调机制浅析

    C#的回调机制浅析

    这篇文章主要介绍了C#的回调机制,较为通俗的分析了回调机制的本质与使用时的注意事项,对于C#的学习有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • C#实现飞行棋源码

    C#实现飞行棋源码

    这篇文章主要为大家详细介绍了C#实现飞行棋源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 一文带你了解 C# DLR 的世界(DLR 探秘)

    一文带你了解 C# DLR 的世界(DLR 探秘)

    DLR 是 C#4.0 新引进来的概念,其主要目的就是为了动态绑定与交互。下面小编给大家带来一篇不错教程,一文带你了解 C# DLR 的世界,需要的朋友可以参考下
    2020-02-02
  • WinForm中DefWndProc、WndProc与IMessageFilter的区别

    WinForm中DefWndProc、WndProc与IMessageFilter的区别

    这篇文章主要介绍了WinForm中DefWndProc、WndProc与IMessageFilter的区别,较为详细的分析了WinForm的消息处理机制,需要的朋友可以参考下
    2014-08-08
  • C#面向对象编程中依赖反转原则的示例详解

    C#面向对象编程中依赖反转原则的示例详解

    在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解、灵活和可维护。本文将通过实例详细讲讲C#面向对象编程中依赖反转原则,需要的可以参考一下
    2022-07-07
  • C#通过委托调用Button单击事件的方法

    C#通过委托调用Button单击事件的方法

    本文给大家分享的是通过委托取消Button事件switch-case的方法,十分的简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • 详解WPF如何动态生成DataGrid的行和列

    详解WPF如何动态生成DataGrid的行和列

    在日常开发中,DataGrid作为二维表格,非常适合数据的展示和统计,本文以一些简单的小例子,简述在WPF开发中,如何动态生成DataGrid的行和列,需要的可以了解下
    2024-02-02
  • Unity 如何批量修改FBX模型

    Unity 如何批量修改FBX模型

    这篇文章主要介绍了Unity 批量修改FBX模型的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • c# 实现模糊PID控制算法

    c# 实现模糊PID控制算法

    这篇文章主要介绍了c# 实现模糊PID控制算法的示例代码,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下
    2020-12-12
  • C#实现拼手气红包算法

    C#实现拼手气红包算法

    这篇文章主要为大家详细介绍了C#实现拼手气红包算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09

最新评论