7 ответов:
вам нужно переместить его в другой файл (а не в папку), это также может быть использовано для переименования.
Move:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt");переименовать:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\SomeFile2.txt");причина, по которой он говорит "файл уже существует" в вашем примере, заключается в том, что
C:\test\Testпытается создать файлTestбез расширения, но не может сделать это, так как папка уже существует с тем же именем.
что нужно:
if (!File.Exists(@"c:\test\Test\SomeFile.txt")) { File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt"); }или
if (File.Exists(@"c:\test\Test\SomeFile.txt")) { File.Delete(@"c:\test\Test\SomeFile.txt"); } File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt");Это будет либо:
- если файл не существует в месте назначения, успешно переместить файл, или;
- если файл существует в месте назначения, удалите его, а затем переместите файл.
Edit: я должен уточнить свой ответ, хотя он самый популярный! Второй параметр файла.Перемещение должно быть конечный файл - не папку. Вы указываете второй параметр в качестве папки назначения,не имя файла назначения-это какой файл.Переезд требует. Итак, второй параметр должен быть
c:\test\Test\SomeFile.txt.
лично я предпочитаю этот метод. Это перезапишет файл в месте назначения, удалит исходный файл, а также предотвратит удаление исходного файла при сбое копирования.
string source = @"c:\test\SomeFile.txt"; string destination = @"c:\test\test\SomeFile.txt"; try { File.Copy(source, destination, true); File.Delete(source); } catch { //some error handling }
Если файл действительно существует и вы хотите его заменить используйте следующий код:
string file = "c:\test\SomeFile.txt" string moveTo = "c:\test\test\SomeFile.txt" if (File.Exists(moveTo)) { File.Delete(moveTo); } File.Move(file, moveTo);
вы можете сделать P/Invoke to
MoveFileEx()- pass 11 наflags(MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH)[return: MarshalAs(UnmanagedType.Bool)] [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Unicode)] static extern bool MoveFileEx(string existingFileName, string newFileName, int flags);или, вы можете просто позвонить
Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(existingFileName, newFileName, true);после добавления в Microsoft.На языке VisualBasic в качестве ссылки.
по данным документы для файла.Двигайся нет параметра "перезаписать, если существует". Вы пытались указать пункт назначения папку, но вы должны дать полную спецификацию файла.
повторное чтение документов ("предоставление возможности указать новое имя файла"), I думаю, добавление обратной косой черты в спецификацию папки назначения может работать.
попробовать
Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(Source, Destination, True). Последний параметр-переключатель перезаписи, которыйSystem.IO.File.Moveнет.
Comments