检查文件存在并且在C#中具有正确的命名标准

时间:2017-06-23 00:24:28

标签: c#

我们有一个来自第三方供应商的流程,每天都会丢弃销售和投资数据,可能会遇到以下任何一种情况

  1. 删除正确的文件。 (命名标准:test.xls)

  2. 删除正确的文件,但不遵循正确的命名标准。 (其他 名称可以是test_mmddyyyy或testmmddyyyy)

  3. 没有丢弃文件。
  4. 我正在尝试围绕这些场景构建我的逻辑,并坚持如何在文件存在时构建我的逻辑但没有正确的命名标准并检查这种情况并将文件名更改为适当的命名标准。

    public void Main()
    {
        try
        {
            string filefullpathname = @"C:\Temp\test.xls";
    
            if (File.Exists(filefullpathname) == false)
            {
                Console.WriteLine("File does not exist in the path");
            }
    
            // file exists but right naming standard not followed (Other names could be test_mmddyyyy or testmmddyyyy)
            // how to check for this condition and change the name of the file to the naming standard
            else
            {
                string dirname = @"C:\Temp\";
                DirectoryInfo directory = new DirectoryInfo(dirname);
                string filepartialname = "test";
    
                FileInfo[] fileindirectory = directory.GetFiles(filepartialname + "*");
    
                foreach (FileInfo filename in fileindirectory)
                {
                    string fullname = filename.FullName;
                    bool ind = Path.HasExtension(fullname);
    
                    if (ind == false)
                    {
                        File.Move(fullname, directory + filepartialname + ".xls");
                    }
                    else
                    {
                        File.Move(fullname, directory + filepartialname + ".xls");
                    }
                }
            }
    
            Dts.TaskResult = (int)ScriptResults.Success;
        }
    
        catch (Exception error)
        {
            Console.WriteLine(error);
        }
    }
    

2 个答案:

答案 0 :(得分:0)

目前还不清楚它是仅仅是文件名还是缺少扩展名。所以我把它们放进去了。

    public void Main()
    {
        try
        {
            string dirname = @"C:\Temp\";
            DirectoryInfo directory = new DirectoryInfo(dirname);
            string filepartialname = "test";

            FileInfo[] fileindirectory = directory.GetFiles(filepartialname + "*");

            foreach (FileInfo filename in fileindirectory)
            {
                if (filename.Extension == "")
                {
                    //doesn't have an extension                            
                }
                else if (!Regex.IsMatch(filename.Name.Replace(filename.Extension, ""), @"^[A-Z|a-z]$"))
                {
                    //contains more then just test
                }
                else
                {
                    //file is good
                }
            }
        }
        catch (Exception error)
        {
            Console.WriteLine(error);
        }
    }

答案 1 :(得分:0)

您对输入内容的解释以及您希望如何移动这些输入并不是很清楚,但这应该可以让您开始:

var expectedFilename = Path.Combine(someOtherDirectory, "test.xls");

// Matches test* and *.xls
var relevantFiles = Directory
    .EnumerateFiles(searchDirectory, "*", SearchOption.TopDirectoryOnly)
    .Where(f => Path.GetFileName(f).StartsWith("test") || Path.GetExtension(f).Equals(".xls"))

foreach (var file in relevantFiles)
{
    // If there's more than one file matching the pattern, last one in wins
    File.Move(file, expectedFilename);
}