Home→Forums→MonoBrick EV3 Firmware→Saving files
Tagged: File
- This topic has 7 replies, 3 voices, and was last updated 11 years, 4 months ago by  Simon Stochholm. Simon Stochholm.
- 
		AuthorPosts
- 
		
			
				
June 19, 2014 at 09:08 #4429 
 Simon StochholmParticipantHow can I save a file to the EV3 while my program is running? June 19, 2014 at 14:14 #4432 
 Tcm0ParticipantWhy do you want to do that? June 19, 2014 at 14:59 #4433 
 Helmut WunderParticipantJFYI, to me it’s also important to create files by a running program, e.g., to store settings a/o data which can be reloaded and rewritten/updated . 
 Examples:
 sound (rhythm) patterns for spoken words,
 x,y,z coordinates for teached-in robot arm positions,
 look-up tables of different kind,
 log files of different kind,
 recognized patterns by a neural net,
 2D environment maps of rooms and mazes….June 19, 2014 at 16:55 #4434 
 Tcm0ParticipantOkay, I thought that you wanted to upload a program during running another program. 
 You can test the “general” file access options of visual studio. They might work.June 19, 2014 at 21:43 #4436 
 Simon StochholmParticipantI need it for saving settings, so that I can read those settings if the ev3 has been turned off. I have tried the following ways: 
 1) private static string path = Path.GetDirectoryName(Assembly.GetAssembly(typeof(AbstractMemory)).CodeBase);
 2) static string filePath = “/home/root/apps/test.dat”;
 3) static DirectoryInfo di = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
 4)private static string filePath = “test.dat”;
 5)private static string filePath = Path.Combine(Environment.CurrentDirectory, “test.dat”);
 But none of them seems to work for me.Can anyone give a good example of saving to a file on the ev3, or just the correct way to find the correct path to save the file June 20, 2014 at 07:07 #4440 
 Simon StochholmParticipant[SOLVED] 
 It turned out that I had forgotten to serialize part of my classes.
 In order to save files use this path:
 private static string filePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), “test.dat”);And then just read and write bytes to and from this filePath June 20, 2014 at 07:38 #4441 
 Helmut WunderParticipanthow is it possible to read/write variables other than bytes dircty, 
 without having to rearrange and convert data from basic bytes, e.g.
 int16,
 int32,
 float64,
 strings
 arrays of single data type (e.g., arrays[6] of float)
 structureslike fprintf, fscanf, and fputs etc. in C: FILE * pFile; int n; char name [100]; pFile = fopen ("myfile.txt","w"); for (n=0 ; n<3 ; n++) { puts ("please, enter a name: "); gets (name); fprintf (pFile, "Name %d [%-10.10s]\n",n,name); } fclose (pFile); //... pFile = fopen ("myfile.txt","w+"); fprintf (pFile, "%f %s", 3.1416, "PI"); rewind (pFile); fscanf (pFile, "%f", &f); fscanf (pFile, "%s", str); fclose (pFile); printf ("I have read: %f and %s \n",f,str);June 20, 2014 at 08:58 #4442 
 Simon StochholmParticipantWhat I have done is simply to serialize and deserialize an object, and then just return whatever object I need: (I had to do it this way, because the file was generated on the fly) 
 private static string filePath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), “test.dat”);public static void Serialize(IDictionary<string, Action> combos) 
 {
 var formatter = new BinaryFormatter();
 var stream = new MemoryStream();formatter.Serialize(stream, combos); 
 stream.Position = 0;
 var bytes = stream.GetBuffer();using (var streamer = File.Create(filePath)) 
 {
 streamer.Write(bytes, 0, bytes.Length);
 }
 }public static IDictionary<string, Action> Deserialize() 
 {
 var bytes = File.ReadAllBytes(filePath);
 var formatter = new BinaryFormatter();
 var stream = new MemoryStream(bytes);
 var action = (IDictionary<string, Action>)formatter.Deserialize(stream);
 return action;
 }If the file already exists on the EV3 you can simply do like this: 
 string text = System.IO.File.ReadAllText(filePath);// Display the file contents to the console. Variable text is a string. 
 LcdConsole.WriteLine(“Contents of WriteText.txt = {0}”, text);// Example #2 
 // Read each line of the file into a string array. Each element
 // of the array is one line of the file.
 string[] lines = System.IO.File.ReadAllLines(filePath);// Display the file contents by using a foreach loop. 
 LcdConsole.WriteLine(“Contents of WriteLines2.txt = “);
 foreach (string line in lines)
 {
 // Use a tab to indent each line of the file.
 LcdConsole.WriteLine(“\t” + line);
 }
- 
		AuthorPosts
You must be logged in to reply to this topic.

 
		 
		 
		 
		 
		 
		
Follow