File.Move делает копию файла - PullRequest
1 голос
/ 29 июля 2011

У меня есть код, в котором я пытаюсь создать временный файл для использования в качестве zip-файла.

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

Однако вместо перемещения (переименования) временного файла создается новый файл.

Я определенно запутался ...

Кевин

Ответы [ 3 ]

1 голос
/ 29 июля 2011

Я думаю, это то, что вы ищете:

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));
            });'
0 голосов
/ 29 июля 2011

Ваш код работает для меня.

Path.GetTempFileName()

создаст новый 0-байтовый временный файл в каталоге ваших машин% TEMP%.После запуска строки File.Move временный файл переименовывается с расширением .zip.

После этого вы можете использовать файл:

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

}
0 голосов
/ 29 июля 2011

Это ожидаемое поведение.Если вы хотите удалить старый файл, вам нужно сделать это явно.

...