日期:2014-05-18  浏览次数:20869 次

如何检测指定目录下的指定文件是否存在
比如说我A文件夹下应该有1.txt文件,但是我放的是2.txt文件,控制台就会告诉我这个文件位置放错了,2.txt应该放在B文件夹里。
请问这个要如何实现啊?



------解决方案--------------------
C# code

        private void process()
        {
            // 这里假设d:/test/目录下只有一级文件夹,即,D:/test/下只有1,2,3,4,5,6 之类的文件,而1下面再也没有文件夹了。而这些1,2,3文件夹下的文件名,只有a.txt,b.txt,c.txt.....
            var files = Directory.GetFiles( @"D:/test/" );
            Regex reg = new Regex( @"(D:/test/)([^/]*)/([^.]*\.txt)", RegexOptions.IgnoreCase );
            if ( files != null )
            {
                int fileCount = 0;    // 文件总数
                int errCount = 0;    //错误总数
                foreach ( var file in files )
                {
                    var m = reg.Match( file );
                    if ( m.Success )
                    {
                        fileCount++;
                        if ( getDirName( m.Groups[3].Value ) == m.Groups[2].Value )
                        {
                            // 移到正确的位置
                            File.Move( file, m.Groups[1].Value + getDirName( m.Groups[3].Value ) + m.Groups[3].Value );
                        }
                        else
                            errCount++;
                    }
                }
            }

            // 总数:fileCount;
            // 错误:errCount;
            // 错误率:errCount/(fileCount * 1.0)
        }
        /// <summary>
        /// 判断该文件应该放在什么文件夹下(也就是对应规则设置的地方了,假设文件名是A.txt,B.txt等等)
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private string getDirName( string fileName )
        {
            /// 即,表示,如果文件名第一个符是A。则返回应该存放的文件夹名应该是 1,如果是Z的话,则返回26
            return Convert.ToInt32( fileName[0] - 'A' + 1 ).ToString();
            //// 或者
            //switch ( fileName )
            //{
            //    case "A.txt": return "1";
            //    case "B.txt": return "2";
            //    default: return "";
            //}
        }