Apa manfaat dari menulis ke lokasi temp, dan kemudian menyalinnya ke tujuan yang dituju?

48

Saya menulis aplikasi yang berfungsi dengan gambar satelit, dan bos saya meminta saya untuk melihat beberapa aplikasi komersial, dan melihat bagaimana mereka berperilaku. Saya menemukan perilaku aneh dan kemudian ketika saya mencari, saya menemukannya di aplikasi standar lainnya juga.

Program-program ini pertama menulis ke folder temp, dan kemudian menyalinnya ke tujuan yang dituju.

Contoh: 7zip mengekstrak dulu ke folder temp, dan kemudian menyalin data yang diekstraksi ke lokasi yang Anda minta untuk mengekstrak datanya.

Saya melihat beberapa masalah dengan pendekatan ini:

  1. Folder temp mungkin tidak memiliki cukup ruang, sementara lokasi yang dituju mungkin memiliki banyak ruang.

  2. Jika ini adalah file besar, ini bisa memakan waktu yang tidak dapat diabaikan untuk operasi penyalinan.

Saya banyak memikirkannya, tetapi saya tidak dapat melihat satu poin positif untuk melakukan ini. Apakah saya kehilangan sesuatu, atau apakah ada manfaat nyata untuk melakukan ini?

Devdatta Tengshe
sumber
Jika aplikasi membutuhkannya, lakukanlah. Kalau tidak, lakukan apa yang masuk akal. Otak Anda memberi tahu Anda bahwa itu tidak diperlukan dalam kasus ini. Saya berada di kamp melakukan pekerjaan sesedikit mungkin seperti yang Anda tahu dari jawaban saya, jadi saya sarankan melakukan pekerjaan sesedikit mungkin untuk aplikasi.
Jason Sebring
1
Apakah Anda yakin itu "menyalin" file dan tidak "memindahkan" itu? Perbedaan besar.
frankc
Dari blogs.rsa.com/... , untuk malwares, keuntungannya adalah 1) Jaminan kemampuan menulis menghindari deteksi "kesalahan merah" sebelum Anda bahkan mengunduh sepenuhnya virus ke komputer pengguna 2) Disk TEMP biasanya lebih cepat (RAMDisk) mengurangi waktu untuk deteksi saat virus masih dalam tahap pengunduhan (setelah virus terbentuk sepenuhnya dan berhasil dieksekusi selama 0,05 detik, permainan telah berakhir, jadi ini perlombaan waktu)
Pacerier
3) Saat Anda masih mengunduh atau menjalankan, jika antivirus menabrak Anda (kadang-kadang tanpa diketahui) dan membiarkan tulang Anda tergeletak, Anda masih dapat mengandalkan peluang x% bahwa OS atau pengguna secara tidak sengaja akan membantu Anda menghapus tulang-tulang mati Anda, sementara itu adalah barang-barang kliring massal dari folder TEMP, ini membantu mengurangi kemungkinan deteksi.
Pacerier

Jawaban:

96

Beberapa alasan yang dapat saya pikirkan:

  • Pada sebagian besar platform, pemindahan file bersifat atomik, tetapi penulisan file tidak (terutama jika Anda tidak dapat menulis semua data sekaligus). Jadi jika Anda memiliki pola produsen / konsumen yang khas (satu proses menghasilkan file, yang lain mengawasi direktori dan mengambil semua yang ditemukannya), menulis ke folder temp terlebih dahulu dan hanya kemudian pindah ke lokasi nyata berarti konsumen tidak pernah dapat melihat file yang belum selesai.
  • Jika proses yang menulis file mati setengah jalan, Anda memiliki file yang rusak pada disk Anda. Jika berada di lokasi nyata, Anda harus membersihkannya sendiri, tetapi jika berada di lokasi sementara, OS akan mengurusnya.
  • Jika file tersebut dibuat saat pekerjaan cadangan sedang berjalan, pekerjaan itu dapat mengambil file yang tidak lengkap; direktori temp biasanya dikecualikan dari cadangan, jadi file hanya akan dimasukkan setelah dipindahkan ke tujuan akhir.
  • Direktori temp mungkin berada pada sistem file yang cepat tapi volatile (mis. Ramdisk), yang dapat bermanfaat untuk hal-hal seperti mengunduh beberapa potongan dari file yang sama secara paralel, atau melakukan pemrosesan di tempat pada file dengan banyak pencarian. Juga, direktori temp cenderung menyebabkan lebih banyak fragmentasi daripada direktori dengan lebih sedikit membaca, menulis, dan menghapus, dan menjaga direktori temp pada partisi yang terpisah dapat membantu menjaga fragmentasi dari partisi lain tetap rendah.

TL; DR - sebagian besar bermuara pada atomicity, yaitu, Anda ingin membuatnya sehingga (pada lokasi akhir) file tersebut selesai atau tidak ada sama sekali pada waktu tertentu.

tammmer
sumber
12
Jika direktori temp berada di partisi terpisah, Anda kehilangan atomicity.
yfeldblum
16
Beberapa program akan mengekstrak / menyalin ke direktori yang dimaksud, tetapi mereka akan menggunakan ekstensi file sementara (misalnya .tmp) dan mengganti nama ketika selesai.
Dan Diplo
5
Kadang-kadang menulis ke file temp juga berguna ketika beberapa contoh program Anda dapat mencoba mengunggah file yang sama pada waktu yang bersamaan, dan Anda tidak dapat mengandalkan sistem file untuk memberikan tingkat penguncian yang tepat (seperti API penyimpanan awan yang tidak didefinisikan dengan baik) . Menggunakan file temp akan memastikan file yang dihasilkan tidak akan berakhir dengan campuran data dari kedua unggahan. Tentu saja ini hanyalah contoh lain dari atomisitas.
Krzysztof Kozielczyk
1
Kasing Dan Diplo berguna saat memperbarui file yang ada. Anda tidak ingin mengganti yang lama sampai yang baru berhasil ditulis, jangan sampai tulisan yang baru gagal atau yang lain baca yang baru sebelum sepenuhnya ditulis.
RalphChapin
1
Sayangnya folder OS Temp penuh dengan file dan folder lama karena OS tidak membersihkannya! Jadi kita sebagai pengembang harus tetap membersihkannya! superuser.com/questions/296824/…
markmnl
15

Ini tampaknya menjadi masalah di Windows, lebih khusus terkait dengan bagaimana drag-drop dikelola.

Pengembang klien WINSCP telah mengembangkan ekstensi shell mereka sendiri, yang mengesampingkan perilaku drag-drop ini dan memungkinkan menjatuhkan file ke folder yang tepat dengan segera. Mereka menjelaskan trik dalam dokumentasi mereka dan, yang lebih menarik, apa masalahnya dan bagaimana mereka memecahkannya.

Inilah bagian yang menarik:

Mekanisme seret & lepas Windows tidak memungkinkan aplikasi sumber operasi seret & lepas untuk mengetahui dengan mudah, tempat file dijatuhkan. Terserah aplikasi target (biasanya Windows Explorer) untuk mentransfer file ke tujuan. Ini agak masuk akal, karena aplikasi sumber tidak dapat mentransfer file ke semua tujuan yang mungkin. Ingatlah bahwa Anda dapat menjatuhkan file tidak hanya ke direktori, tetapi bahkan ke file ZIP (atau arsip lainnya), direktori jarak jauh (via FTP, SFTP, SCP, ...), trash, ...

Jelas bahkan Windows Explorer (atau aplikasi target lainnya, seperti WinZip) tidak dapat mengunduh file dari sumber apa pun yang mungkin (khususnya ia tidak tahu SFTP / SCP).

Juga, khusus untuk 7Zip: pengguna ray023 menjawab pertanyaan ini di T&U SuperUser Stack: https://superuser.com/a/422463

Pada dasarnya, jika alih-alih menyeret file Anda, Anda menggunakan metode "ekstrak di sini" yang tersedia di bith 7-ZIP dan Winrar, file tersebut langsung diekstraksi ke direktori yang benar.

Jalayn
sumber
2
Pertanyaannya bukan "Mengapa 7zip menggunakan file temp?" Pertanyaan sebenarnya adalah "Mengapa file temp biasanya digunakan dalam pengembangan perangkat lunak?"
Phil
@ Phil Contoh yang diberikan adalah, dari apa yang saya mengerti, apa yang terjadi ketika Anda menyeret satu file dari arsip ke folder di sistem, tanpa meminta secara eksplisit untuk "mengekstraknya". Namun, saya membaca kembali pertanyaannya, dan ya, saya pikir Anda benar karena penulis ingin tahu lebih banyak tentang kegunaan folder sementara, yang omong-omong dijawab oleh tdammers (+1 juga dipilih oleh saya)
Jalayn
Sementara jawaban Anda tidak persis apa yang saya cari, +1, untuk menyelesaikan masalah saya dengan 7zip
Devdatta Tengshe
1
Komentar yang baik pada dasarnya bermuara pada: mengapa suatu program menggunakan folder temp? Karena ketika drag dan drop itu tidak tahu folder tujuan dan hanya "memberikannya" ke windows, maka windows mengambil alih dan meletakkan file di tempat yang tepat.
Pieter B
0

Jika Anda harus melakukan segala jenis pemrosesan data ke file (decode / convert / etc ..), maka lebih baik menggunakan file sementara dan ketika selesai, dan hanya jika selesai, transfer hasilnya ke tujuan akhir.

Manfaat:

  1. Hanya file yang sudah selesai yang mencapai tujuan
  2. File sementara mungkin (harus) berada di media cepat
  3. Hindari fragmentasi pada file final
  4. Mengizinkan penggunaan media lain sebagai tujuan akhir (ftp, cloud, apa pun)
  5. File temp yang dibatalkan lebih mudah dibersihkan

Saya tidak melihat manfaat nyata dari menulis langsung ke tujuan saat memproses data.

roetnig
sumber