统一查找并删除所有名为“删除此文件.txt”的文件

本文关键字:文件 删除 删除此文件 txt 查找 | 更新日期: 2023-09-27 18:04:41

我有一个统一的包与我的文件夹结构预设置,但意味着是空的,为了导出文件夹,我把一个文件"删除这个文件。txt"到每个底部文件夹的结构,允许统一导出文件夹,但我想写一个脚本,在启动时运行删除这些文件,但我似乎不能得到脚本找到所有的文件在各个文件夹。我该怎么做呢?

using UnityEngine;
using UnityEditor;
using System.IO;
[InitializeOnLoad]
public class Startup {
    static Startup()
    {
        foreach (string file in Directory.GetFiles("Assets/")) {
            if (file == "Delete This File.txt") {
                Debug.Log (file);
            } else {
                // Do Nothing
            }
        }
    }
}

统一查找并删除所有名为“删除此文件.txt”的文件

您的代码需要进行一些更改

[InitializeOnLoad]
public class Startup {
static Startup()
{
    // unfortunately this is not available in NET 3.5
    // foreach (string file in Directory.EnumerateFiles.....
    foreach (string file in Directory.GetFiles("Assets", "Delete This File.txt", SearchOption.AllDirectories)) 
    {
         Debug.Log (file);
         // File.Delete(file);      
    }
}

这种方法使用Directory.GetFiles的重载,它接受初始目录、要搜索的模式和搜索根的所有子目录的选项。结果字符串是要删除的完整文件名。

同样,在。NET 4.0中,Directory有一个更好的选择。MSDN文档

解释的枚举文件

EnumerateFiles和GetFiles方法的区别如下使用EnumerateFiles,您可以开始枚举名称集合在整个集合被返回之前;当你使用GetFiles时,你必须等待整个名称数组返回后才能这样做吗访问数组。因此,当您处理许多文件和目录,EnumerateFiles可以更有效。

可以将Directory.GetFilesDirectory.GetDirectoriesFileInfo类组合使用。我修改了Microsoft的RecursiveFileProcessor代码示例,并添加了FileInfoif语句,以使其查找所有名为"Delete This File.txt"的文件并删除它们。

using UnityEngine;
using UnityEditor;
using System.IO;
[InitializeOnLoad]
public class Startup 
{
    static Startup()
    {
        ProcessDirectory("Assets/");
    }
    public static void ProcessDirectory(string targetDirectory)
    {
        // Process the list of files found in the directory.
        string[] fileEntries = Directory.GetFiles(targetDirectory);
        foreach (string filePath in fileEntries)
        {
            FileInfo fileInfo = new FileInfo(filePath);
            if (fileInfo.Name == "Delete This File.txt")
            {
                ProcessFile(filePath);
            }
        }
        // Recurse into subdirectories of this directory.
        string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
        foreach (string subdirectory in subdirectoryEntries)
        {
            ProcessDirectory(subdirectory);
        }
    }
    // Insert logic for processing found files here.
    public static void ProcessFile(string path)
    {
        Debug.Log("Processed file " + path);
        //Delete File
        File.Delete(path);
    }
}

发现目录后。EnumerateFiles不是我的选择,我尝试了get文件的相同方法,并找到了一个有效的解决方案。这段代码不仅删除文本文件,还删除与之关联的元文件,计算文本文件被删除的次数,并在日志中通知我删除了多少次。

using UnityEngine;
using UnityEditor;
using System.IO;
/*   Project Name : Ember Guard
 *    Script Name : RemoveDeleteFile
 *    Script Path : Assets/Editor/RemoveDeleteFile.cs
 *  Script Author : FaalFaazDov || Raisltin M. Thoreson
 *     Created On : 29/08/2016 14:24
 *    Modified On : N/A
 *        Version : 0.0.1Alpha
 */
 /*************************************************************************
 *
 * Biophase Entertainment
 * __________________
 *
 *  [2016] Biophase Entertainment
 *  All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Biophase Entertainment and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Biophase Entertainment
 * and its suppliers and may be covered by Canadian and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information, reproduction of this material or attempting
 * to read the content of these files is strictly forbidden unless prior written
 * permission is obtained from Biophase Entertainment.
 *
 */
[InitializeOnLoad]
public class Startup {
    static Startup()
    {
        int x = 0;
        string path = Application.dataPath;
        string[] files = Directory.GetFiles (path, "Delete This File.txt", SearchOption.AllDirectories);
        foreach (string f in files) {
            File.Delete (f);
            File.Delete (f + ".meta");
            x++;
        }
        string fm;
        if (x == 1) {
            fm = "file";
        } else {
            fm = "files";
        }
        Debug.Log ("Deleted " + x + " " + fm + ".");
    }
}