File.Move制作文件的副本

时间:2011-07-29 16:07:39

标签: c# .net file io

我有一些代码,我正在尝试创建一个临时文件用作zip文件。

string tempPath = Path.GetTempFileName(); 
string targetPath = 
    string.Concat(Path.GetTempPath(),"//",Path.GetFileNameWithoutExtension(tempPath),".zip");
File.Move(tempPath, targetPath);

然而,正在创建一个新文件,而不是移动(重命名)临时文件。

我当然很困惑......

凯文

3 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西:

FileInfo.MoveTo()

            var newFiles = System.IO.Directory.GetFiles(updateLocation).Select(file => new FileInfo(file));

            var workingDirectory = Environment.CurrentDirectory;
            var existingFiles = System.IO.Directory.GetFiles(workingDirectory).Select(file => new FileInfo(file));

            newFiles.ToList().ForEach(newFile =>
            {
                var matchedFile = existingFiles.ToList().Find(delegate(FileInfo file) { return file.Name == newFile.Name; });

                if(matchedFile != null)
                {
                    if(newFile.LastWriteTimeUtc != matchedFile.LastWriteTimeUtc)
                    {
                        if(!Directory.Exists(TEMP_DIRECTORY_NAME))
                            Directory.CreateDirectory(TEMP_DIRECTORY_NAME);

                        matchedFile.MoveTo(Path.Combine(TEMP_DIRECTORY_NAME, matchedFile.Name));
                        newFile.CopyTo(Path.Combine(workingDirectory, newFile.Name));
                    }
                }
                else
                    newFile.CopyTo(Path.Combine(workingDirectory, newFile.Name));
            });'

答案 1 :(得分:0)

这是预期的行为。如果您希望删除旧文件,则需要明确地执行此操作。

答案 2 :(得分:0)

您的代码适合我。

Path.GetTempFileName()

将在您的机器%TEMP%目录中创建一个新的0字节临时文件。运行File.Move行后,临时文件将以.zip扩展名重命名。

在此之后,您现在可以使用以下文件:

using (var writeStream = new FileStream(targetPath, FileMode.Open, FileAccess.ReadWrite))
{
    // CODE HERE

}