private void PutNextEntry(FileStream s, string fileID, string fileName, long fileLength) { IEFS_FileInfo fileInfo = new IEFS_FileInfo(fileName, fileID, fileLength); byte[] data = fileInfo.ToBytes(); s.Seek(0, SeekOrigin.End); s.Write(data, 0, data.Length); }
//pos在数据文件中的起始位置(包含文件头信息) len 文件头长度+文件长度 private IEFS_FileInfo GetFileInfo(string searchFileID, out long pos) { FileStream dataFileStream = null; try { dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None); if (dataFileStream.Length == 0) { pos = 0; return(null); } long total = 0; while (true) { IEFS_FileInfo fileInfo = new IEFS_FileInfo(dataFileStream, total); if (fileInfo.fielID == searchFileID) { pos = total; return(fileInfo); } total = total + fileInfo.BytesLength + fileInfo.fileLength; if (total == dataFileStream.Length) { break; } } pos = 0; return(null); } catch (Exception ex) { #region 出错处理 MessageBox.Show(ex.Message); pos = 0; return(null); #endregion } finally { #region 释放 if (dataFileStream != null) { dataFileStream.Close(); } #endregion } }
public bool DeleteFile(string deleteFileID) { #region 获取文件信息 long pos = 0; IEFS_FileInfo fileInfo = GetFileInfo(deleteFileID, out pos); if (fileInfo == null) { return(false); } #endregion FileStream dataFileStream = null; FileStream destStream = null; try { dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None); destStream = new FileStream(_fileName + ".move", FileMode.Create, FileAccess.ReadWrite, FileShare.None); CopyDeleteStream(dataFileStream, destStream, pos, fileInfo.BytesLength + fileInfo.fileLength); return(true); } catch (Exception ex) { #region 出错处理 MessageBox.Show(ex.Message); return(false); #endregion } finally { #region 释放 if (destStream != null) { destStream.Close(); } if (dataFileStream != null) { dataFileStream.Close(); } #endregion #region 除与重命名文件 File.Delete(_fileName); File.Move(_fileName + ".move", _fileName); #endregion } }
public DataTable ListFiles() { #region 生成DataTable与其架构 DataTable dataTable = new DataTable(); #region FileID DataColumn col1 = new DataColumn("FileID"); col1.DataType = typeof(string); col1.MaxLength = 50; dataTable.Columns.Add(col1); #endregion #region FileName DataColumn col2 = new DataColumn("FileName"); col2.DataType = typeof(string); col2.MaxLength = 255; dataTable.Columns.Add(col2); #endregion #region FileLength DataColumn col3 = new DataColumn("FileLength"); col3.DataType = typeof(int); dataTable.Columns.Add(col3); #endregion #endregion FileStream dataFileStream = null; try { dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None); if (dataFileStream.Length == 0) { return(null); } long total = 0; while (true) { IEFS_FileInfo fileInfo = new IEFS_FileInfo(dataFileStream, total); total = total + fileInfo.BytesLength + fileInfo.fileLength; DataRow row = dataTable.NewRow(); row.BeginEdit(); row["FileID"] = fileInfo.fielID; row["FileName"] = fileInfo.fileName; row["FileLength"] = fileInfo.fileLength; row.EndEdit(); dataTable.Rows.Add(row); if (total == dataFileStream.Length) { break; } } } catch (Exception ex) { #region 出错处理 MessageBox.Show(ex.Message); return(null); #endregion } finally { #region 释放 if (dataFileStream != null) { dataFileStream.Close(); } #endregion } return(dataTable); }
public bool GetFile(string destFileName, string fileID) { #region 获取文件信息 long pos = 0; IEFS_FileInfo fileInfo = GetFileInfo(fileID, out pos); if (fileInfo == null) { return(false); } #endregion #region 得到临时文件名 string tempPath = Application.StartupPath + @"\tempzip"; CheckTempPath(tempPath); string tempFileName = tempPath + @"\" + fileID + ".zip"; #endregion #region 从数据文件中提取相应文件的压缩包 FileStream dataFileStream = null; FileStream tempFileStream = null; try { dataFileStream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.None); tempFileStream = new FileStream(tempFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None); byte[] buffer = new byte[4096]; dataFileStream.Seek(pos + fileInfo.BytesLength, SeekOrigin.Begin); while (true) { int size = dataFileStream.Read(buffer, 0, buffer.Length); if (size <= 0) { break; } if (dataFileStream.Position > (pos + fileInfo.BytesLength + fileInfo.fileLength)) { int xsize = size; size -= Convert.ToInt32(dataFileStream.Position - pos - fileInfo.BytesLength - fileInfo.fileLength); if (size == 0) { break; } buffer = new byte[size]; dataFileStream.Seek(dataFileStream.Position - xsize, SeekOrigin.Begin); dataFileStream.Read(buffer, 0, buffer.Length); tempFileStream.Write(buffer, 0, buffer.Length); break; } else { tempFileStream.Write(buffer, 0, buffer.Length); } } } catch (Exception ex) { #region 出错处理 MessageBox.Show(ex.Message); return(false); #endregion } finally { #region 释放 if (dataFileStream != null) { dataFileStream.Close(); } if (tempFileStream != null) { tempFileStream.Close(); } #endregion } #endregion #region 从压缩包中解压文件 I3SharpZip.UpZipFileByIndex(tempFileName, destFileName, 4096, 1); return(true); #endregion }