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);
}
});