我创建了一个临时文件夹来保存一些音频文件。我的意图是在将音频文件加入一个文件后删除此临时文件夹。
以下是我的代码中创建目录directoryName
中的临时文件的部分:
fileName = fileCounter.ToString() + ".wav";
fileCounter++;
fileName = directoryName + "\\" + fileName;
加入所有临时文件的代码如下:
public void Concatenate(string outputFile, List<string> sourceFiles)
{
byte[] buffer = new byte[1024];
WaveFileWriter waveFileWriter = null;
try
{
foreach (string sourceFile in sourceFiles)
{
using (WaveFileReader reader = new WaveFileReader(sourceFile))
{
if (waveFileWriter == null)
{
// first time in create new Writer
waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat);
}
else
{
if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
{
throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format");
}
}
int read;
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
waveFileWriter.WriteData(buffer, 0, read);
}
}
}
}
finally
{
if (waveFileWriter != null)
{
waveFileWriter.Dispose();
}
}
}
我从question
获得了帮助这是我删除文件的代码
private void DeleteDirectory()
{
string[] files = Directory.GetFiles(directoryName);
foreach (string file in files)
{
File.Delete(file);
}
Directory.Delete(directoryName);
}
但问题中的代码只删除了文件夹中的文件。但我也想删除该文件夹。
答案 0 :(得分:2)
删除前无需删除文件夹中的所有文件。 Directory.Delete(directoryName,true)
应该删除目录及其中的所有文件/子目录。
无论如何,你应该将它包含在try / catch中,就好像里面的任何文件正在使用它会抛出IOException
答案 1 :(得分:1)
C#&#39; s Directory.Delete
有一个递归标志,您可以使用它来删除目录及其所有内容。使用此功能,您不必先手动删除所有文件。
只需将true作为第二个参数传递给Directory.Delete:
Directory.Delete(directoryName, true);
谨慎使用!
答案 2 :(得分:0)
(这与您的问题无关,但我发布的答案是因为评论过于笨拙。)
Concatenate方法的代码可以简化并缩减一半:
public void Concatenate(string outputFile, List<string> sourceFiles)
{
using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat))
{
foreach (string sourceFile in sourceFiles)
{
using (WaveFileReader reader = new WaveFileReader(sourceFile))
{
if (reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
reader.CopyTo(waveFileWriter);
else
throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format");
}
}
}
}
答案 3 :(得分:0)
考虑使用System.IO.Path类来创建临时文件夹。
还要考虑将DirectoryInfo和FileInfo用于文件和文件夹而不是字符串。毕竟:文件不是字符串。文件的名称是字符串。除了使用DirectoryInfo和FileInfo之外,如果要创建/重命名/移动/删除文件和文件夹或更改扩展名,请确保文件名没有问题
var tmpFolderName = Path.Combine(Path.GetRandomPathName, Path.GetRandomFileName));
DirectoryInfo tmpFolder = Directory.Create(tmpFolderName)
// Tmp file name of a file in tmpFolder:
var tmpFileName = Path.Combine(tmpFolder.Name, fileName);
// Delete the tmp folder and everything in it:
tmpFilder.Delete(true);
可以毫无顾虑地创建,填充和删除此文件夹,因为您确定没有人会使用它,因为没有人拥有您的文件夹名称。
使用Path.Combine确保您不必担心斜线&#39; \#39;。此外,您的代码将可移植以用于其他系统,不会使用反斜杠作为分隔符。