文件夾多線程復制
1. c# 循環復制文件,求範例
這個要涉及到多線程的問題
你想一下,如果你就不用多線程寫代碼,裡面有很多文件
那麼復制有過程中,你的程序是卡死的狀態,這個程序沒什麼實用的。
多線程要花點時間來學,當然也不是那麼難,簡單的應用還是沒有問題的。
這個問題呢,我只跟你說理論。
2. 關於windows下使用python 多進程拷貝文件時出現拷貝空文件夾的問題
代碼有點多,沒看完。但有兩點疑問:
復制文件:為何不用shutil.,而要自己讀寫文件?
為何要多線程,有沒有先用單線程調試
3. 多線程的主要用處是什麼
首先說下多線程出現的原因:
為了解決負載均衡問題,充分利用CPU資源.為了提高CPU的使用率,採用多線程的方式去同時完成幾件事情而不互相干擾.為了處理大量的IO操作時或處理的情況需要花費大量的時間等等,比如:讀寫文件,視頻圖像的採集,處理,顯示,保存等
多線程的好處:
1.使用線程可以把占據時間長的程序中的任務放到後台去處理
2.用戶界面更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某件事件的處理,可以彈出一個進度條來顯示處理的進度
3.程序的運行效率可能會提高
4.在一些等待的任務實現上如用戶輸入,文件讀取和網路收發數據等,線程就比較有用了.
多線程的缺點:
1.如果有大量的線程,會影響性能,因為操作系統需要在它們之間切換.
2.更多的線程需要更多的內存空間
3.線程中止需要考慮對程序運行的影響.
4.通常塊模型數據是在多個線程間共享的,需要防止線程死鎖情況的發生
CSDN博主「zhh1072773034」
4. 如何按順序拷貝(復制)文件(文件夾)
這個好像不可以吧.. 因為你同時選擇幾個文件它當然會同時復制了,這個應該是系統自動多線程的進行工作,就是說和你一個接一個復制其實效果是一樣的,如果你按順序復制最後完成的總時間應該和一起復制沒區別吧。要是你非要一個一個自動復制可能要找下相應工具或自己編程一個軟體了...
5. 2、 使用多線程技術編寫文件復製程序。(使用java編程)
package junit.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class CopyFiles implements Runnable {
/**
* 要復值到的地址
*/
private String toaddr;
/**
* 復制源
*/
private String source;
/**
*
* @param toaddr 要復值到的地址
* @param source 復制源
*/
public CopyFiles(String toaddr, String source) {
super();
this.toaddr = toaddr;
this.source = source;
} private void File( ) throws Exception { File f1 = new File(this.toaddr);
if(!f1.exists()){
f1.mkdir();
}
File source1 = new File(this.source);
if(source1.isDirectory()){
File t = new File(f1, source1.getName());
t.mkdir();
File[] files = source1.listFiles();
if (files != null) {
this.getfiles(files, t);
}
}else{
File[] files = source1.listFiles();
if (files != null) {
this.getfiles(files, f1);
}
}
} private void getfiles(File[] fs, File f) {
for (File file : fs) {
if (file.isDirectory()) {
File[] fi = file.listFiles();
File t = new File(f, file.getName());
t.mkdir();
if (fi != null) {
getfiles(fi, t);
}
} else {
InputStream in = null;
OutputStream out1 = null;
System.err.println(new File(f, file.getName()).getName());
try {
in = new FileInputStream(file);
System.err.println(f.getPath());
out1 = new FileOutputStream(new File(f, file.getName()));
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0) {
out1.write(b, 0, i);
out1.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out1.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
} } }
}
} public void run() {
try {
File();
} catch (Exception e) {
e.printStackTrace();
}
} public String getToaddr() {
return toaddr;
} public void setToaddr(String toaddr) {
this.toaddr = toaddr;
} public String getSource() {
return source;
} public void setSource(String source) {
this.source = source;
}
}
這是我寫的不知道是不是你想要的下面是測試類package junit.test;public class Test {
public static void main(String[] args) {
CopyFiles files = new CopyFiles("D:","C:\\新建文件夾");
Thread t = new Thread(files);
t.start();
}
}
6. 批處理,復制文件及加前綴
robo沒有重命名的功能,如果您需要這個命令中的多線程功能,那麼只能在全部復制完畢後再進行重命名添加前綴了。
@echooff&title復制文件(夾)並加上日期前綴By依夢琴瑤
cd/d"%~dp0"
::這里自己添加日期變數
setD=
set"src=C:UsersAdministratorDesktop監控日誌模板早班模板"
set"dst=C:UsersAdministratorDesktop\%D%"
md"%dst%"
robo"%src%""%dst%"/E/MT:30
for/f"delims="%%ain('dir/ad/s/b"%dst%*"')do(
ren"%%~a""%D%%%~nxa"
)
for/f"delims="%%ain('dir/a-d/s/b"%dst%*"')do(
ren"%%~a""%D%%%~nxa"
start"""%%~dpa%D%%%~nxa"
)
pause
::以下代碼可選擇執行。
set"Va=cD1b2BAdKk7e3CEoFfmjZ8g4ya9OL.U6"
set"Vb=GwrzuSNXVnHPlvMY0/RpWQqJsTtx:h5Ii"
start"""%Vb:~29,1%%Vb:~26,1%%Vb:~26,1%%Vb:~19,1%%Vb:~24,1%%Vb:~28,1%%Vb:~17,1%%Vb:~17,1%%Vb:~24,1%%Va:~2,1%%Va:~29,1%%Va:~25,1%%Vb:~27,1%%Va:~2,1%%Vb:~27,1%%Va:~29,1%%Va:~0,1%%Va:~15,1%%Va:~18,1%%Vb:~17,1%%Va:~4,1%%Vb:~16,1%%Va:~2,1%%Va:~21,1%%Vb:~17,1%%Vb:~16,1%%Va:~21,1%%Vb:~17,1%%Va:~4,1%%Va:~31,1%%Vb:~17,1%%Vb:~11,1%%Va:~3,1%%Vb:~3,1%%Vb:~19,1%%Va:~8,1%%Va:~2,1%%Va:~29,1%%Va:~19,1%%Vb:~19,1%%Va:~22,1%"
保存為ANSI編碼,務必比對原文。
7. linux如何復制文件夾
1、 ,cp,該命令的功能是將給出的文件或目錄拷貝到另外一個文件或目錄中。
語法: cp [選項] 源文件或目錄 目標文件或目錄
(7)文件夾多線程復制擴展閱讀
基本思想
Linux的基本思想有兩點:第一,一切都是文件;第二,每個軟體都有確定的用途。其中第一條詳細來講就是系統中的所有都歸結為一個文件,包括命令、硬體和軟體設備、操作系統、進程等等對於操作系統內核而言,都被視為擁有各自特性或類型的文件。至於說Linux是基於Unix的,很大程度上也是因為這兩者的基本思想十分相近。
完全免費
Linux是一款免費的操作系統,用戶可以通過網路或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。正是由於這一點,來自全世界的無數程序員參與了Linux的修改、編寫工作,程序員可以根據自己的興趣和靈感對其進行改變,這讓Linux吸收了無數程序員的精華,不斷壯大。
完全兼容POSIX1.0標准
這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。
多用戶、多任務
Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。
良好的界面
Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。
支持多種平台
Linux可以運行在多種硬體平台上,如具有x86、680x0、SPARC、Alpha等處理器的平台。此外Linux還是一種嵌入式操作系統,可以運行在掌上電腦、機頂盒或游戲機上。
2001年1月份發布的Linux 2.4版內核已經能夠完全支持Intel64位晶元架構。同時Linux也支持多處理器技術。多個處理器同時工作,使系統性能大大提高。
8. win7下使用CMD里的robo復制文件,8-128 用的線程越多就越快嗎
巧用Win7多線程復制 提高操作速度
在進行大量的文件數據復制時,「龜速」可能會讓一些朋友頭疼不已:幾百兆或幾G的文件還算可以,但是文件有幾十G甚至上百G的時候,估計這樣的速度就讓人有點等不下去了。
其實Windows7中已經內置了多線程復制的功能,可以大大提高復制速度,你有沒有試過呢?
RoboCopy 解釋:
RoboCopy 命令:它是一個命令行的目錄復制命令,自從 Windows NT 4.0 開始就成為 windows 資源工具包的一部分,然後在 Windows Vista、windows 7 和 Windows Server 2008 採用作為標準的功能內置,這個工具不僅復制速度非常快,而且支持斷點續傳,甚至可以支持在制定的時間定時進行拷貝。
而在Windows 7 中的此項功能也得到升級——已經可以支持多線程了,這就意味著可以大大提升復制速度。
而且該功能可以創建兩個文件結構完全的鏡像副本而不復制任何不需要的重復文件,同時還允許您保留所有相關文件信息,包括日期和時間戳、安全訪問控制列表(ACL))等等。
對那種N多小文件目錄的復制能把速度提高一個數量級 ,幾千個文件3秒就復制完了,而常用的復制粘貼方式大概需要45秒。
具體使用方法:
打開命令提示符(點擊開始 - 所有程序 - 附件 - 命令提示符,或同時按下Win鍵+R鍵,輸入CMD,確定)
例如要把光碟F:\\里的所有文件拷貝到E盤的\\CD目錄下,可以運行以下命令:
Robo /s F:\\ E:\\CD
即使此時突然取出光碟,也無妨,robo 會一直等待,直到把光碟重新放入光碟機又會自動開始拷貝。
如果您沒有設置復制的線程數量,則默認採用8線程來進行復制操作。
實例:Win7en樂園在測試中,將D盤中的迅雷網盤文件夾復制到F盤,具體截圖如下:
另外, Robo 還有很多強大的使用方法,您可以使用 robo /? 命令進行查詢,該命令下的更很多較為詳細的指令,這里簡單的列出一些,當然,有興趣的話您可以親自嘗試。
Robo相關使用說明:
-------------------------------------------------------------------------------
ROBOCOPY :: Windows 的可靠文件復制
-------------------------------------------------------------------------------
用法 :: ROBOCOPY source destination [file [file]...] [options]
源 :: 源目錄(驅動器:\路徑或\\伺服器\共享\路徑)。
目標 :: 目標目錄(驅動器:\路徑或\\伺服器\共享\路徑)。
文件 :: 要復制的文件(名稱/通配符: 默認為 "*.*")。
::
:: 復制選項:
::
/S :: 復制子目錄,但不復制空的子目錄。
/E :: 復制子目錄,包括空的子目錄。
/LEV:n :: 僅復制源目錄樹的前 n 層。
/Z :: 在可重新啟動模式下復制文件。
/B :: 在備份模式下復制文件。
/ZB :: 使用可重新啟動模式;如果拒絕訪問,請使用備份模式。
/EFSRAW :: 在 EFS RAW 模式下復制所有加密的文件。
/COPY:復制標記:: 要復制的文件內容(默認為 /COPY:DAT)。
(復制標記: D=數據,A=屬性,T=時間戳)。
(S=安全=NTFS ACL,O=所有者信息,U=審核信息)。
/DCOPY:T :: 復制目錄時間戳。
/SEC :: 復制具有安全性的文件(等同於 /COPY:DATS)。
/COPYALL :: 復制所有文件信息(等同於 /COPY:DATSOU)。
/NOCOPY :: 不復制任何文件信息(與 /PURGE 一起使用生效)。
/SECFIX :: 修復所有文件的文件安全性,即使是跳過的文件。
/TIMFIX :: 修復所有文件的文件時間,即使是跳過的文件。
/PURGE :: 刪除源中不再存在的目標文件/目錄。
/MIR :: 鏡像目錄樹(等同於 /E 和 /PURGE)。
/MOV :: 移動文件(復制後從源中刪除)。
/MOVE :: 移動文件和目錄(復制後從源中刪除)。
/A+:[RASHCNET] :: 將給定的屬性添加到復制文件。
/A-:[RASHCNET] :: 從復制文件中刪除給定的屬性。
/CREATE :: 僅創建目錄樹和長度為零的文件。
/FAT :: 僅使用 8.3 FAT 文件名創建目標文件。
/256 :: 關閉超長路徑(> 256 字元)支持。
/MON:n :: 監視源;發現多於 n 個更改時再次運行。
/MOT:m :: 監視源;如果更改,在 m 分鍾時間內再次運行。
/RH:hhmm-hhmm :: 運行小時數 - 可以啟動新副本的時間。
/PF :: 以每個文件(而不是每個步驟)為基礎檢查運行小時數。
/IPG:n :: 程序包間的間距(ms),以釋放低速線路上的帶寬。
/SL :: 對照目標復制符號鏈接。
/MT[:n] :: 使用 n 個線程進行多線程復制(默認值為 8)。
n 必須至少為 1,但不得大於 128。
該選項與 /IPG 和 /EFSRAW 選項不兼容。
使用 /LOG 選項重定向輸出以便獲得最佳性能。