I’m trying to figure out how to use the micro-SD card with the Spider board. I’m pretty sure the problem is I’m missing a using statement and/or assembly reference but can’t figure out what I’m missing. I’ve included references to GHI.Premium.IO, Microsoft.SPOT.IO, Microsoft.SPOT.Native and mscorlib. My code is below.
Maybe a more important question is how do I figure out what using and assemblies I need for the hardware I’m using without having to resort to this forum?
using System;
using System.IO;
using System.Text;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.IO;
using GHI.Premium.IO;
namespace SDCardTest
{
public class Program
{
public static void Main()
{
Debug.Print(" Program Started \r\n");
PersistentStorage sCard = new PersistentStorage("SD");
sdCard.MountSDCard();
// sdCard.UnmountSDCard();
//Get the root directory
string rootDirectory = sdCard.GetStorageDevice().RootDirectory;
//Use Streamwriter to write a text file
StreamWriter textFile = new StreamWriter(rootDirectory + @ "\hello.txt");
textFile.WriteLine("Hello SD card");
textFile.Close();
//Use FileStream to read a text file
FileStream fileStream = new FileStream(rootDirectory + @ "\hello.txt", FileMode.Open);
//load the data from the stream
byte[] data = new byte[fileStream.Length];
fileStream.Read(data, 0, data.Length);
fileStream.Close();
string text = new string(Encoding.UTF8.GetChars(data));
Debug.Print(text);
}
}
}
Nothing to help you about your problem. However you asked a GREAT question…
Maybe a more important question is how do I figure out what using and assemblies I need for the hardware.
I see so much code posted (not necessarily here) that does the same thing… Great code… Ya’ figure it will work… NO SO! … Two hours later you figured out the…
Error 1 The type or namespace name ‘FileStream’ could not be found (are you missing a using directive or an assembly reference?) C:\Users\magene\AppData\Local\Temporary Projects\SDCardTest\Program.cs 27 13 SDCardTest
and 1 of these errors
Error 3 The name ‘FileMode’ does not exist in the current context C:\Users\magene\AppData\Local\Temporary Projects\SDCardTest\Program.cs 28 58 SDCardTest
with this code
using System;
using System.IO;
using System.Text;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.IO;
using GHI.Premium.IO;
using GHI.Premium.System;
using GHI.Premium.Net;
namespace SDCardTest
{
public class Program
{
public static void Main()
{
Debug.Print(" Program Started \r\n");
PersistentStorage sdCard = new PersistentStorage("SD");
sdCard.MountFileSystem();
// sdCard.UnmountSDCard();
string rootDirectory = VolumeInfo.GetVolumes()[0].RootDirectory;
FileStream FileHandle = new FileStream(rootDirectory +
@ "\hello.txt", FileMode.Create);
byte[] data =
Encoding.UTF8.GetBytes("This string will go in the file!");
// write the data and close the file
FileHandle.Write(data, 0, data.Length);
FileHandle.Close();
// if we need to unmount
sdCard.UnmountFileSystem();
}
}
}
You want the 4.2 Microsoft Netmf reference, if you’re using a 4.2 project.
But here’s the thing. If you have created a Gadgeteer app, and dragged the SD card module onto the design surface, all that is added for you and you don’t need to know. This is a really easy way to have the correct items included for you and you can then take that learning over into your other app. To do that, view the DLLs in the Object Browser, and you can navigate through the structure to find the appropriate items you’re looking for.
Filestream is in System.IO, as is FileMode. Seems that you have the USING but do you have the Reference included?
using System;
using System.IO;
using System.Text;
using Microsoft.SPOT;
using Microsoft.SPOT.IO;
using GHI.Premium.IO;
namespace SDCardTest
{
public class Program
{
public static void Main()
{
Debug.Print(" Program Started \r\n");
PersistentStorage sdCard = new PersistentStorage("SD");
sdCard.MountFileSystem();
VolumeInfo sdVol = new VolumeInfo("SD");
Debug.Print("Volume Name: " + sdVol.Name.ToString());
Debug.Print("Volume Total Size: " + sdVol.TotalSize.ToString());
Debug.Print("Volume Free Space: " + sdVol.TotalFreeSpace.ToString());
Debug.Print("Volume File System: " + sdVol.FileSystem.ToString());
Debug.Print("Volume Serial Num: " + sdVol.SerialNumber.ToString());
Debug.Print("Volume ID: " + sdVol.VolumeID.ToString());
Debug.Print("Volume Label: " + sdVol.VolumeLabel.ToString());
Debug.Print("Volume Root Dir: " + sdVol.RootDirectory.ToString());
string rootDirectory = sdVol.RootDirectory;
FileStream FileHandle = new FileStream(rootDirectory + @ "\hello.txt", FileMode.Create);
byte[] data = Encoding.UTF8.GetBytes("This string will go in the file!");
// write the data and close the file
FileHandle.Write(data, 0, data.Length);
FileHandle.Close();
String[] files = Directory.GetFiles(@ "\SD");
for(int j=0; j<files.Length; j++)
Debug.Print("File number " + j.ToString() + " " + files[j]);
// if we need to unmount
sdCard.UnmountFileSystem();
}
}
}
Depends if you have it formatted as a single volume, I guess. But also, the comment really is saying you haven’t got a 2Gb maximum size, not that the code that underpins this will report accurate volume space. As a test, can you write a really big file to it and then see if it decreases by the size of the file or if it’s maxxing out on displaying the available space?