예제 #1
0
    void BuildArchive()
    {
        File.Delete(ArchivePath);
        var otherFiles = Directory.GetFiles(UmswePath);

        var handle = IntPtr.Zero;

        SFileCreateArchive(ArchivePath, 0, (uint)(DataFiles.Length + otherFiles.Length), out handle);
        SFileCloseArchive(handle);

        using (var mpq = new MpqArchive(ArchivePath, FileAccess.ReadWrite)) {
            mpq.AddListFile("");
            for (int i = 0; i < DataFiles.Length; i++)
            {
                var file = DataFiles[i];
                mpq.AddFileFromDisk($"{TempFolder}\\{file}", $"UI\\{file}");
            }

            for (int i = 0; i < otherFiles.Length; i++)
            {
                var file = otherFiles[i];
                mpq.AddFileFromDisk(file, Path.GetFileName(file));
            }

            mpq.Dispose();
        }
    }
예제 #2
0
 /**
  * Imports a file to the archive.
  * Deletes/imports to overwrite.
  * It imports from "in/" folder
  */
 private void Import(String filename, MpqArchive archive)
 {
     try
     {
         Console.WriteLine("Importing file: in/" + filename);
         if (!File.Exists("in/" + filename))
         {
             Console.WriteLine("File does not exist: in/" + filename + " skipping. . .");
             return;
         }
         if (archive.HasFile(filename))
         {
             // We need to delete because stormlib doesn't overwrite
             Console.WriteLine("File already exists, deleting");
             archive.DeleteFile(filename);
         }
         Console.WriteLine("Inserting file");
         archive.AddFileFromDisk("in/" + filename, filename);
         if (!archive.HasFile(filename))
         {
             Console.WriteLine("Expected import file exists, but did not!");
             return;
         }
         Console.WriteLine("Successfully imported in/" + filename + " as " + filename);
     }
     catch (Exception ex)
     {
         Console.WriteLine("Failed to import file " + filename + ": " + ex.Message);
     }
 }