ProgramingTip

File.Move 작동하지 않음-파일이 이미 있음

bestdevel 2020. 10. 15. 08:09
반응형

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()flagsMOVEFILE_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

반응형