void writeTempTerrainToZip(ZipArchive zip) { int version = 0; //Write our terrain information AbstractFile md = zip.CreateFile("terrain.tdl", true); //Write the size of our data.. Stream stream = md.OpenWrite(true);//File.Open(filename, FileMode.OpenOrCreate, FileAccess.Write); BinaryWriter bw = new BinaryWriter(stream); bw.Write(version); bw.Write(TerrainGlobals.getTerrain().getNumXVerts()); bw.Write(TerrainGlobals.getTerrain().getNumZVerts()); bw.Write(TerrainGlobals.getTerrain().getTileScale()); //min Vector3 min = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_min; bw.Write(min.X); bw.Write(min.Y); bw.Write(min.Z); //max Vector3 max = TerrainGlobals.getTerrain().getQuadNodeRoot().getDesc().m_max; bw.Write(max.X); bw.Write(max.Y); bw.Write(max.Z); //write terrain positions for (int x = 0; x < TerrainGlobals.getTerrain().getNumXVerts(); x++) { for (int z = 0; z < TerrainGlobals.getTerrain().getNumZVerts(); z++) { Vector3 pos = TerrainGlobals.getTerrain().getRelPos(x, z); bw.Write(pos.X); bw.Write(pos.Y); bw.Write(pos.Z); } } for (int x = 0; x < TerrainGlobals.getTerrain().getNumXVerts(); x++) { for (int z = 0; z < TerrainGlobals.getTerrain().getNumZVerts(); z++) { Vector3 pos = TerrainGlobals.getTerrain().getNormal(x, z); bw.Write(pos.X); bw.Write(pos.Y); bw.Write(pos.Z); } } //write quadnodes BTerrainQuadNode[] mNodes = TerrainGlobals.getTerrain().getQuadNodeLeafArray(); bw.Write(mNodes.Length); for (int i = 0; i < mNodes.Length; i++) { BTerrainQuadNodeDesc desc = mNodes[i].getDesc(); bw.Write(desc.mMinXVert); bw.Write(desc.mMinZVert); } bw.Close(); stream.Close(); }
/// <summary> /// 上传文件 /// </summary> /// <param name="ftpAddress"></param> /// <param name="remoteFilename"></param> /// <param name="localFilename"></param> /// <param name="resumeOperation"></param> public bool UploadFile(string ftpAddress, string localFilename, string remoteFilename, bool resumeOperation) { FtpSiteData siteData = ParseFtpAddress(ftpAddress); if (siteData == null) { throw new ArgumentException("Invalid ftp address format!"); } using (FtpConnection connection = new FtpConnection(siteData.Host, siteData.Port, siteData.UserName, siteData.Password)) { SetConnection(connection); AbstractFolder remoteFolder = new FtpFolder(connection); AbstractFile remoteFile = remoteFolder.GetFile(remoteFilename); AbstractFile localFile = new DiskFile(localFilename); if (!resumeOperation || !remoteFile.Exists || remoteFile.Size > localFile.Size) { localFile.CopyTo(remoteFile, true); } else if (remoteFile.Size == localFile.Size) { return(true); } else if (remoteFile.Size < localFile.Size) { byte[] buf = new byte[1024]; int cnt = -1; using (System.IO.Stream remoteStream = remoteFile.OpenWrite(false)) { using (System.IO.Stream localStream = localFile.OpenRead()) { localStream.Seek(remoteFile.Size, System.IO.SeekOrigin.Begin); // can't seek. OpenWrite如果不overwrite自动append //remoteStream.Seek(0, System.IO.SeekOrigin.End); do { cnt = localStream.Read(buf, 0, buf.Length); remoteStream.Write(buf, 0, cnt); } while (cnt == buf.Length); } } } return(true); } //FtpClient client = LoginFtp(ftpAddress); //client.SendFile(localFilename, remoteFilename); }
public bool SaveData(string fileName, bool overwrite, bool checkReadOnly) { try { using (PerfSection p = new PerfSection("SaveData() " + Path.GetFileName(fileName))) { if (File.Exists(fileName)) { if (!overwrite) { return(false); } if (checkReadOnly && File.GetAttributes(fileName) == FileAttributes.ReadOnly) { return(false); } File.SetAttributes(fileName, FileAttributes.Normal); File.Delete(fileName); } DiskFile zipFile = new DiskFile(fileName); zipFile.Create(); if (!zipFile.Exists) { return(false); } ZipArchive zip = new ZipArchive(zipFile); Dictionary <string, IDataStream> .Enumerator it = mStreams.GetEnumerator(); while (it.MoveNext() != false) { AbstractFile md = zip.CreateFile(it.Current.Key, true); Stream s = md.OpenWrite(true); BufferedStream bs = null; if (CoreGlobals.OutOfMemory == false) { bs = new BufferedStream(s, 10000000); //~10mb buffer it.Current.Value.Save(bs); } else { it.Current.Value.Save(s); } if (bs != null) { bs.Flush(); bs.Close(); } else { s.Close(); } } } return(true); } catch (System.Exception ex) { CoreGlobals.FatalEdDataSaveError = true; throw ex; } return(false); }
void writeTempModelsToZip(ZipArchive zip) { SceneObjectsXML sceneObjects = new SceneObjectsXML(); BBoundingBox objectAABB = new BBoundingBox(); objectAABB.empty(); string baseDir = CoreGlobals.getWorkPaths().mGameDirectory; if (mIncludeObjects) { //searalize an XML file to memorystream holding position and model names List <EditorObject> editObjs = SimGlobals.getSimMain().getEditorObjects(false, SimMain.eFilterTypes.cFilterAll, -1, false); for (int objIdx = 0; objIdx < editObjs.Count; objIdx++) { if (editObjs[objIdx] == null) { continue; } if (editObjs[objIdx].GetType() == typeof(SimObject)) { SimObject obj = editObjs[objIdx] as SimObject; if (obj.IgnoreToAO) { continue; } if (obj != null && obj.ProtoObject != null) { string grannyName = obj.ProtoObject.getGrannyFileName(); if (grannyName == "") { continue; } if (grannyName.Contains(baseDir)) { grannyName = grannyName.Remove(0, baseDir.Length); } //if this GR2 isn't already listed, then list it. if (!sceneObjects.objectGR2Names.Contains(grannyName)) { sceneObjects.objectGR2Names.Add(grannyName); } //add our instance ObjectInstanceXML inst = new ObjectInstanceXML(); inst.GR2Filename = grannyName; inst.setOrientation(obj.getMatrix()); sceneObjects.objectinstances.Add(inst); //add our transformed BB to the global BB list if (obj != null && obj.mVisual != null) { if (!obj.IgnoreToAO) { objectAABB.addPoint(obj.mAABB.max + obj.getPosition()); objectAABB.addPoint(obj.mAABB.min + obj.getPosition()); } } } } } sceneObjects.aabbmin = TextVectorHelper.ToString(objectAABB.min); sceneObjects.aabbmax = TextVectorHelper.ToString(objectAABB.max); } //write it to an XML stream AbstractFile md = zip.CreateFile("modelPositions.xml", true); Stream stream = md.OpenWrite(true); XmlSerializer s = new XmlSerializer(typeof(SceneObjectsXML), new Type[] { }); s.Serialize(stream, sceneObjects); stream.Close(); //Create a folder and copy our GR2s into it //AbstractFolder fold = zip.CreateFolder("models"); //if (mIncludeObjects) //{ // for (int modelIdx = 0; modelIdx < sceneObjects.objectGR2Names.Count; modelIdx++) // { // if (mWorkerThread.CancellationPending) // return; // try // { // if (fullGR2Names[modelIdx] == "") // continue; // DiskFile modelFile = new DiskFile(fullGR2Names[modelIdx]); // modelFile.CopyTo(fold, true); // } // catch (Exception e) // { // continue; // } // } //} }