统一查找并删除所有名为“删除此文件.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
}
}
}
}
您的代码需要进行一些更改
[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.GetFiles
、Directory.GetDirectories
和FileInfo
类组合使用。我修改了Microsoft的RecursiveFileProcessor代码示例,并添加了FileInfo
和if
语句,以使其查找所有名为"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 + ".");
}
}