System.IO

Reading and writing data from the EpicorData user folder requires a reference to service ICE.Lib.FileTransfer.

To read contents from a known file:

string fileName = "ThisIsARelativePath.txt";
string fileContent = String.Empty;
byte[] fileBytes;
this.CallService<Ice.Contracts.FileTransferSvcContract>(hFileTransfer => {
   if(hFileTransfer.FileExists(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName))
   {
      fileBytes = hFileTransfer.DownloadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName);
      // If reading a simple data, csv, or text file
      fileContent = Encoding.ASCII.GetString(fileBytes);
   }
});

To create a new file with overwrite:

string fileName = "ThisIsARelativePath.txt";
string fileContent = "This is the full content of the file.";
byte[] fileBytes = Encoding.ASCII.GetBytes(fileContent);
this.CallService<Ice.Contracts.FileTransferSvcContract>(hFileTransfer => {
   hFileTransfer.UploadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName, fileBytes);
});

To delete a file if it exists:

string fileName = "ThisIsARelativePath.txt";
this.CallService<Ice.Contracts.FileTransferSvcContract>(hFileTransfer => {
   hFileTransfer.FileDelete(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName);
});

To append to an existing file:

string fileName = "ThisIsARelativePath.txt";
string fileContent = "This is the content to append to an existing file.";
byte[] fileBytes, fileBytesAlreadyExisting;
byte[] fileBytesToAppend = Encoding.ASCII.GetBytes($"{Environment.NewLine}{fileContent}");
this.CallService<Ice.Contracts.FileTransferSvcContract>(hFileTransfer => {
   if(hFileTransfer.FileExists(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName))
   {
      fileBytesAlreadyExisting = hFileTransfer.DownloadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName);
      fileBytes = new byte[fileBytesAlreadyExisting.Length + fileBytesToAppend.Length];
      System.Buffer.BlockCopy(fileBytesAlreadyExisting, 0, fileBytes, 0, fileBytesAlreadyExisting.Length);
      System.Buffer.BlockCopy(fileBytesToAppend, 0, fileBytes, fileBytesAlreadyExisting.Length, fileBytesToAppend.Length);
      hFileTransfer.UploadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName, fileBytes);
   }           
});    

To create a new file or append if it exists with a line break:

string fileName = "ThisIsARelativePath.txt";
string fileContent = "This is the content to either add or append.";
byte[] fileBytes, fileBytesAlreadyExisting, fileBytesToAppend;
this.CallService<Ice.Contracts.FileTransferSvcContract>(hFileTransfer => {
   if(hFileTransfer.FileExists(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName))
   {
      fileBytesToAppend = Encoding.ASCII.GetBytes($"{Environment.NewLine}{fileContent}");
      fileBytesAlreadyExisting = hFileTransfer.DownloadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName);
      fileBytes = new byte[fileBytesAlreadyExisting.Length + fileBytesToAppend.Length];
      System.Buffer.BlockCopy(fileBytesAlreadyExisting, 0, fileBytes, 0, fileBytesAlreadyExisting.Length);
      System.Buffer.BlockCopy(fileBytesToAppend, 0, fileBytes, fileBytesAlreadyExisting.Length, fileBytesToAppend.Length);
      hFileTransfer.UploadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName, fileBytes);
   }
   else
   {
      fileBytes = Encoding.ASCII.GetBytes(fileContent);
      hFileTransfer.UploadFile(Epicor.ServiceModel.Utilities.SpecialFolder.UserData, fileName, fileBytes);
   }
});
4 Likes