I have the following statement…
localdir="\\SD\\";
localFilename="log_35.csv.txt";
MethodA
SDCard.createfile(localStream, localdir.ToString() + localFilename.ToString());
Method B
SDCard.createfile(localStream,"\\SD\\log_35.csv.txt");
createfile(string filename)
{
FileStream fileStream = new FileStream(filename, FileMode.Append);//get exception if MethodA!!!
}
Can anyone explain this?
createfile does more then i’m showing, just want to convey the issue
Exception of type: System.IO.IOException
There is an HRESULT code inside the exception object. It might give more details about the real cause
https://www.ghielectronics.com/community/codeshare/entry/218
In any case looks like a bug. I would report it on netmf codeplex.
Thanks Architect.
Looks lie codeshare viewing code part is not working!
I’be noticed that too. I should be able to download.
this is what i get when i use your logging code
[quote] #### Exception System.InvalidCastException - CLR_E_INVALID_CAST (4) ####
#### Message:
#### BreakContinue.Diagnostics.HResults::HResultToString [IP: 0026] ####
#### zigbox.fezcobra2.SDCard::createfile [IP: 0090] ####
#### zigbox.fezcobra2.downloader::DownloadFile [IP: 00f0] ####
#### zigbox.fezcobra2.Program::scheduler_ActionResponse [IP: 0062] ####
#### mfnet.smallbiz.common.Scheduler::queue_ActionReady [IP: 0030] ####
#### mfnet.smallbiz.common.TimeQueue::ActionTime [IP: 0034] ####
A first chance exception of type ‘System.InvalidCastException’ occurred in zigbox.fezcobra2.exe
[/quote]
Interesting it shows that there is an exception inside my HResultToString.
I have just downloaded the code from codeshare and tried it in emulator. HResultToString worked fine without the exception.
Can you show how do you call HResultToString?
@ zigbox -
Interested issue :))
try this to see what is happened?
using System;
using System.Threading;
using Microsoft.SPOT;
namespace MFConsoleApplication1
{
public class Program
{
static string text;
public static void Main()
{
string localdir = "\\SD\\";
string localFilename = "log_35.csv.txt";
text = localdir.ToString() + localFilename.ToString();
CreatFile("\\SD\\log_35.csv.txt");
Thread.Sleep(-1);
}
static void CreatFile(string filename)
{
if (filename.CompareTo(text) == 0)
{
Debug.Print("They are same");
}
else
{
Debug.Print("Oh no not same");
}
FileStream fileStream = new FileStream(filename, FileMode.Append);
}
}
}
tried the code but not luck. If it try to download the same file every minutes…do i have to check wther the files already exists or the filestream overwrite it by default?
@ Architech calling your code liek this
public static void createfile(Stream sdata, string filename)
{
if (!isMounted) MountSD();
byte[] buffer = new byte[BUFFER_SIZE];
sdata.Seek(0, SeekOrigin.Begin);
long remainingBytes = sdata.Length;
try
{
using (FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate,FileAccess.Write))
{
// FileStream fileStream = new FileStream("\\SD\\test.txt", FileMode.Append);
while (remainingBytes > 0)
{
int nRead;
if (remainingBytes < BUFFER_SIZE)
{
nRead = sdata.Read(buffer, 0, (int)remainingBytes);
}
else
{
nRead = sdata.Read(buffer, 0, BUFFER_SIZE);
}
remainingBytes -= nRead;
fileStream.Write(buffer, 0, nRead);
}
if (fileStream != null) fileStream.Close();
}
}
catch (Exception ex)
{
Debug.Print(ex.HResultToString());
}
}