임시 위치에 기록한 다음 원하는 위치에 복사하면 어떤 이점이 있습니까?


47

위성 이미지로 작동하는 응용 프로그램을 작성 중이며 상사는 일부 상업용 응용 프로그램을보고 작동 방식을 확인하도록 요청했습니다. 이상한 동작을 발견 한 후 다른 표준 응용 프로그램에서도 발견했습니다.

이러한 프로그램은 먼저 temp 폴더에 쓴 다음 원하는 대상으로 복사합니다.

예 : 7zip은 먼저 temp 폴더로 추출한 다음 추출 된 데이터를 데이터 추출을 요청한 위치에 복사합니다.

이 방법에는 몇 가지 문제가 있습니다.

  1. 임시 폴더에는 충분한 공간이 없을 수 있지만 의도 한 위치에는 많은 공간이있을 수 있습니다.

  2. 파일이 큰 경우 복사 작업에 무시할 수없는 시간이 걸릴 수 있습니다.

나는 그것에 대해 많이 생각했지만 이것을하는 데 하나의 긍정적 인 포인트를 볼 수 없었습니다. 내가 뭔가를 잃어 버렸습니까? 아니면 이것을 할 때 진정한 이점이 있습니까?


응용 프로그램에 필요한 경우 수행하십시오. 그렇지 않으면 의미있는 일을하십시오. 당신의 뇌는이 경우에 필요하지 않다고 말합니다. 나는 당신이 내 대답으로 알 수 있듯이 가능한 한 최소한의 일을하는 캠프에 있습니다. 그래서 앱에 가능한 한 적은 양의 일을하는 것이 좋습니다.
Jason Sebring 2016 년

1
파일을 "복사"하고 "이동"하고 있지 않습니까? 큰 차이.
frankc

에서 blogs.rsa.com/... , 악성 코드에 대한 장점은 1) 보장 쓸수는 피할 "빨간색 오류"감지 당신도 완벽하게 사용자의 컴퓨터에 바이러스를 다운로드하기 전에 2) TEMP 디스크는 일반적으로 더 빨리 (RAMDisk를) 시간을 감소 바이러스가 여전히 다운로드 단계에있는 동안 탐지 (바이러스가 완전히 형성되어 0.05 초 동안 실행되고, 게임이 끝났으므로 시간이 지남에 따라)
Pacerier

3) 여전히 다운로드 중이거나 실행중인 동안 바이러스 백신이 사용자에게 알려 지거나 (종종 모르는 경우) 뼈를 둘러싼 경우에도 OS 또는 사용자가 실수로 삭제하는 데 도움이 될 확률은 x %입니다 TEMP 폴더에서 물건을 대량으로 지우는 동안 죽은 뼈는 탐지 확률을 줄이는 데 도움이됩니다.
Pacerier

답변:


95

내가 생각할 수있는 몇 가지 이유 :

  • 대부분의 플랫폼에서 파일 이동은 원자 적이지만 파일 쓰기는 그렇지 않습니다 (특히 모든 데이터를 한 번에 쓸 수없는 경우). 따라서 일반적인 생산자 / 소비자 패턴이있는 경우 (한 프로세스는 파일을 생성하고 다른 프로세스는 디렉토리를 감시하고 찾은 모든 것을 선택합니다) 먼저 임시 폴더에 쓰고 실제 위치로 이동하면 소비자가 미완성 파일.
  • 파일을 쓰는 프로세스가 반쯤 종료되면 디스크에 파일이 손상된 것입니다. 실제 위치에 있으면 스스로 청소해야하지만 임시 위치에 있으면 OS가 처리합니다.
  • 백업 작업이 실행되는 동안 파일이 생성되면 작업이 불완전한 파일을 선택할 수 있습니다. temp 디렉토리는 일반적으로 백업에서 제외되므로 파일은 최종 대상으로 이동 한 후에 만 ​​포함됩니다.
  • temp 디렉토리는 빠르지 만 일시적인 파일 시스템 (예 : 램 디스크)에있을 수 있으며, 동일한 파일의 여러 청크를 병렬로 다운로드하거나 많은 탐색을 통해 파일을 처리하는 등의 작업에 유용 할 수 있습니다. 또한 임시 디렉토리는 읽기, 쓰기 및 삭제 빈도가 낮은 디렉토리보다 단편화가 더 많이 발생하며 temp 디렉토리를 별도의 파티션에 유지하면 다른 파티션의 단편화를 유지하는 데 도움이 될 수 있습니다.

TL; DR-그것은 대부분 원 자성으로 요약됩니다.


12
temp 디렉토리가 별도의 파티션에 있으면 원 자성이 손실됩니다.
yfeldblum

16
일부 프로그램은 원하는 디렉토리로 추출 / 복사하지만 임시 파일 확장자 (예 : .tmp)를 사용하고 완료되면 이름을 바꿉니다.
Dan Diplo

5
때로는 임시 파일에 쓰는 것이 프로그램의 여러 인스턴스가 동시에 같은 파일을 업로드하려고 할 때 파일 시스템에 의존하여 올바른 잠금 수준을 제공 할 수없는 경우 (예 : 잘못 정의 된 클라우드 스토리지 API) . 임시 파일을 사용하면 결과 파일이 두 업로드의 데이터 혼합으로 끝나지 않습니다. 물론 이것은 원자 성의 또 다른 예일뿐입니다.
Krzysztof Kozielczyk 2016 년

1
Dan Diplo의 경우는 기존 파일을 업데이트 할 때 유용합니다. 새로운 것을 쓰지 못하거나 완전히 쓰여지기 전에 새로운 것을 쓰지 않으려면 이전 것을 바꾸고 싶지 않습니다.
RalphChapin

1
불행히도 OS Temp 폴더는 오래된 파일과 폴더로 가득 차 있지만 OS는 정리하지 않습니다! 따라서 개발자는 여전히 정리해야합니다! superuser.com/questions/296824/…
markmnl

15

이것은 드래그 앤 드롭을 관리하는 방법과 관련하여 Windows의 문제인 것 같습니다.

의 개발자 WinSCP에의 클라이언트는이 드래그 앤 드롭 동작을 무시하고 즉시 적절한 폴더에 파일을 삭제 할 수 있습니다 자신의 셸 확장을 개발했습니다. 그들은 문서 의 트릭을 설명하고 더 흥미로운 문제는 무엇이고 어떻게 해결했는지 설명합니다.

흥미로운 부분은 다음과 같습니다.

Windows 끌어서 놓기 메커니즘을 사용하면 끌어서 놓기 작업의 소스 응용 프로그램에서 파일을 놓는 위치를 쉽게 찾을 수 없습니다. 파일을 대상으로 전송하는 것은 응용 프로그램 (일반적으로 Windows 탐색기)을 대상으로합니다. 소스 응용 프로그램이 파일을 가능한 모든 대상으로 거의 전송할 수 없기 때문에 다소 합리적입니다. 디렉토리뿐만 아니라 ZIP 파일 (또는 다른 아카이브), 원격 디렉토리 (FTP, SFTP, SCP 등을 통해), 휴지통 등으로 파일을 삭제할 수 있습니다.

분명히 Windows 탐색기 (또는 WinZip과 같은 다른 대상 응용 프로그램)도 가능한 소스에서 파일을 다운로드 할 수 없습니다 (특히 SFTP / SCP를 모르는 경우).

또한 7Zip의 경우 : user ray023이 SuperUser Stack Q & A에서이 질문에 답변합니다. https://superuser.com/a/422463

기본적으로 파일을 끌어다 놓는 대신 bith 7-ZIP 및 Winrar에서 사용할 수있는 "여기에서 추출"방법을 사용하는 경우 파일은 올바른 디렉토리에 직접 추출됩니다.


2
문제는 "7zip이 임시 파일을 사용하는 이유는 무엇입니까?" 실제 질문은 "왜 임시 파일이 소프트웨어 개발에 일반적으로 사용됩니까?"
Phil

@Phil 주어진 예는 "추출"을 명시 적으로 요구하지 않고 하나의 파일을 아카이브의 파일을 시스템의 폴더로 드래그 할 때 발생하는 것입니다. 그러나, 나는 질문을 다시 읽고, 그래, 난 당신이 저자가 그렇고 masterfuly tdammers (+1 너무 나에 의해 투표)에 의해 응답 한 임시 폴더의 유틸리티에 대한 자세한 내용을 알고 싶어한다는 점에서 잘 생각
Jalayn

귀하의 답변이 내가 찾던 것과 정확히 일치하지는 않지만, 7zip으로 내 문제를 해결 한 것에 대해 +1
Devdatta Tengshe

1
좋은 의견은 기본적으로 다음과 같이 요약됩니다. 왜 프로그램이 임시 폴더를 사용합니까? 끌어서 놓을 때 대상 폴더를 알지 못하고 그냥 "폴더"를 창에 제공하기 때문에 Windows가 대신하여 파일을 올바른 위치에 놓습니다.
Pieter B

0

파일에 대해 모든 종류의 데이터 처리를 수행해야하는 경우 (디코드 / 변환 / 등.) 임시 파일을 사용하는 것이 좋으며 완료되면 완료된 경우에만 최종 목적지로 결과를 전송하는 것이 좋습니다.

혜택:

  1. 완성 된 파일 만 대상에 도달
  2. 임시 파일은 빠른 미디어에 있어야합니다.
  3. 최종 파일에서 조각화 방지
  4. 다른 미디어를 최종 대상으로 사용할 수 있습니다 (ftp, cloud 등)
  5. 중단 된 임시 파일을 더 쉽게 청소

데이터를 처리하는 동안 대상에 바로 쓰는 것의 실제 이점은 보이지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.