使用c删除文件夹后删除文件夹#
我已经创建了一个临时文件夹来保留一些音频文件。我的意图是将音频文件加入一个文件后删除此临时文件夹。使用c删除文件夹后删除文件夹#
这里是我的代码,创建目录里面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);
}
但问题中的代码只删除文件夹内的文件。但我想要删除该文件夹。
在删除文件夹之前,不需要删除文件夹中的所有文件。 Directory.Delete(directoryName,true)
应删除目录及其中的所有文件/子目录。
无论如何,你应该附上这在一个try/catch,仿佛任何内部文件正在使用中它会抛出一个IOException
丙的Directory.Delete
#有一个递归的标志,你可以用它来删除目录及所有内容。使用这个,你不必手动删除所有的文件。
简单地传递true作为第二个参数Directory.Delete:
Directory.Delete(directoryName, true);
使用时需谨慎!
(这无关你的问题,但我张贴作为一个答案,因为它是一个评论太麻烦了。)
的拼接方法的代码可以简化,减少了一半:
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");
}
}
}
}
感谢您的建议。 –
考虑使用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可以确保您不必担心斜杠'\'。除了你的代码将被移植到其他系统上使用,不使用反斜杠作为分隔符。
据我所知,你可以使用Directory.Delete和true删除所有包含的文件和子目录,不需要循环。 –
可以很容易地找到答案:https:// *。com/questions/1288718 /如何删除所有文件和文件夹中的目录 –