File.Move 작동하지 않음-파일이 이미 있음
폴더가 있습니다.
c : \ 테스트
이 코드를 시도하고 있습니다.
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
예외가 발생합니다.
존재하는 파일입니다
출력 디렉토리가 확실히 존재하고 입력 파일이 있습니다.
폴더가 아닌 다른 파일로 이동해야하며 이름을 바꾸는 데 사용할 수도 있습니다.
움직임 :
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");
이 다음 중 하나입니다.
- 파일이 대상 위치에 존재하지 않는 경우 파일을 사용하여 이동하거나;
- 파일이 대상 위치에 존재하는 경우 삭제 한 다음 파일을 이동하십시오.
편집 : 가장 찬성표를 찬성에도 불구하고 내 대답을해야합니다! File.Move의 두 번째 매개 변수는해야 할 대상 파일 - 하지 폴더. -th 매개 변수 두를 대상 파일 이름이 아닌 대상 폴더로 지정 합니다. 이것은 File.Move에 필요한 것입니다. 따라서 두 번째 매개 변수는
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
}
P / Invoke를 수행하여 ( )에 대해 11 을 선택할 수 있습니다.MoveFileEx()
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을 참조로 추가 한 후.
파일이 실제로 존재하고 교체 비용 아래 코드를 사용하십시오.
string file = "c:\test\SomeFile.txt"
string moveTo = "c:\test\test\SomeFile.txt"
if (File.Exists(moveTo))
{
File.Delete(moveTo);
}
File.Move(file, moveTo);
File.Move 에 대한 문서에 따르면 "존재하는 경우 덮어 쓰기"매개 변수가 없습니다. 대상 폴더 를 지정하려고했지만 전체 파일 사양을 제공해야합니다.
문서를 다시 읽으면 ( "새 파일 이름을 지정하는 옵션 제공"), 대상 폴더 사양에 백 슬래시를 추가하는 것이 작동 할 수 있다고 생각 합니다.
시도해보십시오 Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(Source, Destination, True)
. 마지막 매개 변수는 Overwrite 스위치 System.IO.File.Move
입니다.
참고 URL : https://stackoverflow.com/questions/5920882/file-move-does-not-work-file-already-exists
'ProgramingTip' 카테고리의 다른 글
Postgres 오류 "파라미터"TimeZone "에 대한 잘못된 값 :"UTC "" (0) | 2020.10.15 |
---|---|
Objective-C의 속성에 블록을 저장하는 방법은 무엇입니까? (0) | 2020.10.15 |
Rails 3.1 자산 파이프 라인 : 컨트롤러 별 펼쳐지는 방법은 무엇입니까? (0) | 2020.10.15 |
Vim / Vi에 커서를 끝으로 이동하는 명령이 검색 하이라이트? (0) | 2020.10.15 |
chart.js는 완전히 새로운 데이터를로드합니다. (0) | 2020.10.15 |