2014-01-16 79 views
0

我想用SourceFileName編寫FileStream,但是當我創建代碼時,錯誤消息指示正在使用文件流。如何替換,所以我打開源文件,然後寫下來,然後存儲在相同的源文件。由於如何在同一文件源中編寫文件流

SourceFileName =輸出

下面是代碼:

public void Encrypt(string SourceFileName, string output, string Key) 
{ 
    try 
    { 
     FileStream FS1 = null; FileStream FS2 = null; 
     FS1 = new FileStream(SourceFileName, FileMode.Open); 
     FS2 = new FileStream(output, FileMode.OpenOrCreate); 
     byte[] input = new byte[FS1.Length]; 
     FS1.Read(input, 0, input.Length); 
     byte[] Encrypted = Encrypt(input, Key); 
     FS2.Write(Encrypted, 0, Encrypted.Length); 
     FS2.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

回答

0

不能讀取和寫入以這種方式相同的文件。您有兩種選擇:

  1. 在寫入所有數據之前先讀取所有數據,之間的處理位於其間。
  2. 寫出一個不同的文件,然後移動它以在完成時覆蓋原始文件。
+0

幫助時,您必須指定共享選項,但我需要替代碼你的意思。你可以嗎? – sloqye

+0

當然可以,但那不是重點。你可以嗎?我已經告訴過你該怎麼做。現在輪到你至少嘗試去做了。如果你不嘗試,你不知道你做不到。 – jmcilhinney

+0

謝謝。編號1.你可以在我的代碼中顯示一些代碼來實現它嗎? – sloqye

0

打開文件

FS1 = new FileStream(SourceFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

+0

我試過了,但消息是'流不支持寫入'。你知道問題出在哪裏嗎? – sloqye

+0

加密(input,Key);不會編譯,因爲它實際上有3個參數。 – Jim

+0

雖然可以讀取和寫入同一個流,但不能覆蓋您應該閱讀的數據,因爲您將讀取剛寫入的數據而不是原始數據。 – jmcilhinney