ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17.21KB ,
资源ID:3578392      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3578392.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(如何把多个文件写入到一个文件中去并能分解.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

如何把多个文件写入到一个文件中去并能分解.docx

1、如何把多个文件写入到一个文件中去并能分解如何把多个文件写入到一个文件中去并能分解.txt如果你同时爱几个人,说明你年轻;如果你只爱一个人,那么,你已经老了;如果你谁也不爱,你已获得重生。积极的人一定有一个坚持的习惯。对于一个文件的读写,其实很简单,就是用FileStream进行Read或者Write就行了。但是如何把多个文件写入到同一个文件,之后要能把这个文件进行还原成多个文件。那么光靠FileStream的Read和Write方法是不够的,首先你需要自行建立文件索引,来标明每个文件在当前文件的位置。 那么最近作了一个简单的DEMO,其中类的部分代码如下:/- Compose Files -/

2、-/-File:clsComposeFiles.cs/-Description:This file is to show how-to compose multi-files into one file / and decompose one file to multi-files./-Author:Knight/-Date:May.16, 2006/-/- Compose Files - namespace ComposeFiles using System; using System.IO; using System.Collections; using System.Text; / /

3、Summary description for clsComposeFiles. / public class clsComposeFiles private ArrayList arrFiles = new ArrayList(); public clsComposeFiles() / / TODO: Add constructor logic here / / / Add a file to be composed / / public void AddFile( string sFileName ) arrFiles.Add( sFileName ); / / Compose files

4、 to the specific file / / / public bool ComposeFiles( string sFileName ) if( arrFiles.Count = 0 ) return false; FileInfo fi = new FileInfo( sFileName ); / Open file to write FileStream fsWriter = null; try if( !fi.Exists ) fsWriter = new FileStream( sFileName, FileMode.CreateNew, FileAccess.ReadWrit

5、e, FileShare.None ); else fsWriter = new FileStream( sFileName, FileMode.Truncate, FileAccess.ReadWrite, FileShare.None ); catch(Exception err) System.Diagnostics.Debug.WriteLine( err.Message ); return false; byte bBuffer = null; / Write files count bBuffer = FileIndex.LongToBytes( arrFiles.Count );

6、 fsWriter.Write( bBuffer, 0, 8 ); const long INDEX_START_POS = 8L; / Init files index FileIndex FI = new FileIndex(); for( int i = 0; i arrFiles.Count; i+ ) fsWriter.Write( FileIndex.ConvertToBytes( ref FI ), 0, 32 ); long FILE_START_POS = INDEX_START_POS + 32 * arrFiles.Count; long lCurFileStartPos

7、 = FILE_START_POS; / Write every file for( int i = 0; i arrFiles.Count; i+ ) WriteFile( arrFilesi.ToString(), ref lCurFileStartPos, INDEX_START_POS, fsWriter, i ); / Close stream fsWriter.Close(); return true; / / Write file name and data into composed file / / / / / / private void WriteFile( string

8、 sFileName, ref long FileStartPos, long IndexStartPos, FileStream fsWriter, int Index ) FileInfo fi = new FileInfo( sFileName ); if( !fi.Exists ) return; FileStream fsReader = null; try fsReader = new FileStream( sFileName, FileMode.Open, FileAccess.Read ); catch return; / Get file name byte bFileNa

9、me = Encoding.Unicode.GetBytes( fi.Name ); / Write file name fsWriter.Write( bFileName, 0, bFileName.Length ); const int BUFFER_LENGTH = 1024; byte bBuffer = new byteBUFFER_LENGTH; int nRealRead = 0; / Write data using do / Read data from file nRealRead = fsReader.Read( bBuffer, 0, BUFFER_LENGTH );

10、/ Write data fsWriter.Write( bBuffer, 0, nRealRead ); while( nRealRead 0 ); / Close file reader fsReader.Close(); FileIndex FINew = new FileIndex(); FINew.NameStartPos = FileStartPos; FINew.NameLength = bFileName.Length; FINew.FileStartPos = FileStartPos + bFileName.Length; FINew.FileLength = fi.Len

11、gth; / Go back to file index position fsWriter.Seek( IndexStartPos + Index * 32, SeekOrigin.Begin ); / Write file index info fsWriter.Write( FileIndex.ConvertToBytes( ref FINew ), 0, 32 ); / Go back to file end fsWriter.Seek( 0, SeekOrigin.End ); / Set file current position FileStartPos += bFileName

12、.Length + fi.Length; / / Decompose file to multi files into specific directory / / / / public bool DecomposeFile( string sFileName, string sDestDir ) FileInfo fi = new FileInfo( sFileName ); if( !fi.Exists ) return false; FileStream fsReader = null; try fsReader = new FileStream( sFileName, FileMode

13、.Open, FileAccess.Read ); catch return false; / Read file count byte bFileCount = new byte8; int nRealRead = 0; nRealRead = fsReader.Read( bFileCount, 0, 8 ); if( nRealRead != 8 ) fsReader.Close(); return false; long lFileCount = FileIndex.BytesToLong( bFileCount ); if( lFileCount 0 ) /Init file ind

14、ex array FileIndex fiArray = new FileIndexlFileCount; byte bFileIndex = new byte32; for( int i = 0; i lFileCount; i+ ) fsReader.Read( bFileIndex, 0, 32 ); fiArrayi = FileIndex.ConvertToFileIndex( bFileIndex ); if( sDestDir sDestDir.Length - 1 != ) sDestDir += ; / Save every file into current directo

15、ry for( int i = 0; i fiArray.Length; i+ ) SaveFile( fsReader, ref fiArrayi, sDestDir ); / Close file reader fsReader.Close(); return true; / / Save every file into directory / / / / private void SaveFile( FileStream fsReader, ref FileIndex FI, string sDestDir ) / Read file name byte bFileName = new

16、byte FI.NameLength ; int nRealRead = fsReader.Read( bFileName, 0, bFileName.Length ); if( nRealRead != bFileName.Length ) return; string sFileName = Encoding.Unicode.GetString( bFileName ); sFileName = sDestDir + sFileName; FileInfo fi = new FileInfo( sFileName ); / Open file to write FileStream fsW

17、riter = null; try if( !fi.Exists ) fsWriter = new FileStream( sFileName, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None ); else fsWriter = new FileStream( sFileName, FileMode.Truncate, FileAccess.ReadWrite, FileShare.None ); catch(Exception err) System.Diagnostics.Debug.WriteLine( err.Mess

18、age ); return; / Init buffer const int BUFFER_LENGTH = 1024; byte bBuffer = new byteBUFFER_LENGTH; long lLeft = FI.FileLength; / Copy file do if( lLeft BUFFER_LENGTH ) fsReader.Read( bBuffer, 0, BUFFER_LENGTH ); fsWriter.Write( bBuffer, 0, BUFFER_LENGTH ); lLeft -= BUFFER_LENGTH; else nRealRead = fs

19、Reader.Read( bBuffer, 0, (int)lLeft ); fsWriter.Write( bBuffer, 0, nRealRead ); lLeft -= nRealRead; while( lLeft 0 ); / close file writer fsWriter.Close(); / / File index data structure / public struct FileIndex public long NameStartPos; public long NameLength; public long FileStartPos; public long

20、FileLength; public static byte ConvertToBytes( ref FileIndex FI ) byte bData = new byte32; Array.Copy( LongToBytes( FI.NameStartPos ), 0, bData, 0, 8 ); Array.Copy( LongToBytes( FI.NameLength ), 0, bData, 8, 8 ); Array.Copy( LongToBytes( FI.FileStartPos ), 0, bData, 16, 8 ); Array.Copy( LongToBytes(

21、 FI.FileLength ), 0, bData, 24, 8 ); return bData; public static byte LongToBytes( long lValue ) byte bData = new byte8; bData0 = (byte)( ( lValue 56 ) & 0xFF); bData1 = (byte)( ( lValue 48 ) & 0xFF); bData2 = (byte)( ( lValue 40 ) & 0xFF); bData3 = (byte)( ( lValue 32 ) & 0xFF); bData4 = (byte)( (

22、lValue 24 ) & 0xFF); bData5 = (byte)( ( lValue 16 ) & 0xFF); bData6 = (byte)( ( lValue 8 ) & 0xFF); bData7 = (byte)(lValue & 0xFF); return bData; public static FileIndex ConvertToFileIndex( byte bData ) if( bData = null | bData.Length != 32 ) throw new Exception( Invalid parameters! ); FileIndex FI

23、= new FileIndex(); byte bBuffer = new byte8; Array.Copy( bData, 0, bBuffer, 0, 8 ); FI.NameStartPos = BytesToLong( bBuffer ); Array.Copy( bData, 8, bBuffer, 0, 8 ); FI.NameLength = BytesToLong( bBuffer ); Array.Copy( bData, 16, bBuffer, 0, 8 ); FI.FileStartPos = BytesToLong( bBuffer ); Array.Copy( b

24、Data, 24, bBuffer, 0, 8 ); FI.FileLength = BytesToLong( bBuffer ); return FI; public static long BytesToLong( byte bData ) if( bData = null | bData.Length != 8 ) throw new Exception( Invalid parameters! ); long lngValue = 0; lngValue += bData0; lngValue = ( lngValue 8 ); lngValue += bData1; lngValue

25、 = ( lngValue 8 ); lngValue += bData2; lngValue = ( lngValue 8 ); lngValue += bData3; lngValue = ( lngValue 8 ); lngValue += bData4; lngValue = ( lngValue 8 ); lngValue += bData5; lngValue = ( lngValue 8 ); lngValue += bData6; lngValue = ( lngValue 8 ); lngValue += bData7; return lngValue; 其中类的操作参看c

26、lsComposeFiles这个类,而文件索引结构参看FileIndex这个Structure。 之后的调用就很简单,例如:合成文件: clsComposeFiles myComposeFiles = new clsComposeFiles(); myComposeFiles.AddFile( D:Ship.exe ); myComposeFiles.AddFile( D:LoginPage.JPG );myComposeFiles.ComposeFiles( D:Ship.dat ); 分解文件: clsComposeFiles myComposeFiles = new clsComposeFiles(); myComposeFiles.DecomposeFile( D:Ship.dat, E: );

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2