|
OK - the first thing to do is run your code and see what happens.
Have a look at the file, and see what it contains - use Windows Explorer to check teh file is there, then double click it to use Notepad to look at the content.
What's in there?
Nothing - the file is empty, which mean you can't read the data back at all!
Why? Well, lets look at your code. The first thing I notice is that you close the Stream, without closing the StreamWriter - so if the Writer doesn't "flush" it's content to the Stream before the Stream closes, it never can.
So try closing the StreamWriter before you close the Stream - that should flush the data to the stream:
FileStream fs;
StreamWriter fw;
fs = new FileStream("D:\\Temp\\Programming.txt", FileMode.OpenOrCreate, FileAccess.Write);
fw = new StreamWriter(fs);
fw.WriteLine("C# Programming");
fw.WriteLine("C Programming");
fw.WriteLine("C++ Programming");
fw.Close();
fs.Close();
(Also notice that I changed where I wrote the file: partly because it's "untidy" to leave files in the root folder - you don't know if they are important in a couple of weeks time - and partly because it's a bad idea to use the root directory of any disk directly. It's often restricted to prevent viruses spreading too easily)
A better way to code your write is to use using blocks:
using (FileStream fs = new FileStream("D:\\Temp\\Programming.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
using (StreamWriter fw = new StreamWriter(fs))
{
fw.WriteLine("C# Programming");
fw.WriteLine("C Programming");
fw.WriteLine("C++ Programming");
}
}
This shows the structure better, and also closes the Stream and StreamWriteer for you, as well as removing them from context so they can;t be used by accident when they aren't ready.
When you have the file written properly, it's pretty easy to read it!
Have a go, and if you are still having troubles, let me know!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
You should close the StreamWriter as well I think.
If you're unsure of the code you could always set a breakpoint and debug or add a try catch statement.
Usually the D drive is not "protected" as someone mentioned, although you never know. Do make sure it exists and that it is not the CD/DVD-ROM drive or something like that.
Hope this helps.
modified 13-Apr-15 4:25am.
|
|
|
|
|
hi everyone,
i have a web service that need authentication so i used soap header authentication along with creating a token , i used this line of code to create it
public string token = Guid.NewGuid().ToString();
but my boss told that's simply .NET guid & did't accept it
so i was asking is there another of creating a token
a token like that
e710581a-f985-40a7-a8e7-808c26177c0f
plz i need this quickly
thnkx
|
|
|
|
|
Did your boss say that .NET guids are not real guids? If so he doesn't know what he's talking about.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
i don't what the refuse for actually & unfortunately he is not here , he's outside the country so if there another way for creating a token that used in web service authentication , plz tell me i needed it very soon
|
|
|
|
|
|
This project I'm working on c# Win App, the customer built a DAL, which compiles into a DLL.
Then used straight Entity Framework 6.+ to bind against.
I read this article, that says you need to use the Entity Data Model to code and bind against.
Entity Framework in WinForms[^]
So I followed the instructions, and now I have a datagrid that I can load data in, and it works.
I figured out how to sort it using OrderBy
Question:
Is this the way to go?
Comment:
I'm old school here, where you hand type what you want to do.
I'm not use to the binding, and Entity Framework is new to me.
I can see how handy this can be if I can figure it out, and implement it correctly.
I would lime to get more control over my select statement here, or am I overlooking the design of EF altogether.
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_context = new entity_data_model.StoreDatabaseEntities();
_context.Customers.Load();
_context.SalesOrderDetails.Load();
this.customerBindingSource.DataSource = _context.Customers.Local.ToBindingList().OrderBy(customer => customer.FirstName);
this.salesOrderDetailBindingSource.DataSource = _context.SalesOrderDetails.Local.ToBindingList();
Debug.WriteLine("Supports Filtering: " + customerBindingSource.SupportsFiltering);
Debug.WriteLine("Supports Filtering: " + salesOrderDetailBindingSource.SupportsFiltering);
customerDataGridView.AutoGenerateColumns = false;
}
|
|
|
|
|
Is this to way to go ... where? What is it you want the code to do? The only reasonable fitness of this code is as an example of ... a badly laid out example of binding to a table of small size. It's most definitely not production quality code as its not scalable at all.
The first thing it does is load ALL of the Customers and ALL of the SalesOrderDetails tables. If the tables are quite large this will result is very slow query performance as EF re-hydrates every object in those tables, even if those objects are not needed by the query.
The code is binding to the ENTIRE list of Customers, not just the customers that are visible in the datagrid. Again, this does not scale as the list of Customers grows and grows. This setup does not support filtering nor does it allow for paging.
It also appears that the grid used for SalesOrderDetails is showing the entire list of orders details, not just the details for a selected Customer. What good is that?
|
|
|
|
|
Good point you made there about loading the entire list of customers and sales orders. I forgot about that.
I'll look for a way to use Entity Framework without binding. So I guess the answer is no.
|
|
|
|
|
No Entity Data Model
And just use the Data Access Layer that is compiled as a DLL
So I replaced the GridView with a ListView, wrote code to create the columns, and wrote this code to load the ListView object.
I really don't want to bind to objects. I want to use the benefits of the Data Access Layer concept, but without binding.
All the examples and turtorials I'm able to locate show Entity Framework and binding to objects.
So I got rid of the Entity Data Model and DataSources, and went back to the DAL only.
I'm not clear on the Entity Framework. Wasn't even sure if I was really using it or not, so I deleted the reference to it.
Got a few error messages in teh code I posted below, so I guess I'm using it.
This is a crash course for me on using DAL and Entity Framework, so please bear with me, I am underwater on this subject.
private void load_customers()
{
lv_customers.Items.Clear();
using (StoreContext context = new StoreContext())
{
var query =
from customer in context.Customers
where customer.FirstName == "Randy" || customer.LastName == "Sublett"
orderby customer.FirstName
select new
{
ID = customer.ID,
FirstName = customer.FirstName,
LastName = customer.LastName,
BusinessName = customer.BusinessName
};
foreach(var ci in query)
{
ListViewItem item = new ListViewItem(ci.ID.ToString(), 0);
item.SubItems.Add(ci.FirstName);
item.SubItems.Add(ci.LastName);
item.SubItems.Add(ci.BusinessName);
item.SubItems.Add(0.ToString());
lv_customers.Items.Add(item);
Application.DoEvents();
}
}
}
|
|
|
|
|
Why doesn't this work:
namespace Sanebox1
{
public class Employee
{
public Department TheDepartment { get; set; }
public Employee()
{
TheDepartment.DepartmentId = 100;
}
}
public struct Department
{
public int DepartmentId { get; set; }
}
}
It won't compile with
Cannot modify the return value of 'Sandbox1.Employee.TheDepartment' because it is not a variable
- I'm not trying to change the struct, I'm try to change the departmentId.
What's wrong here?
If it's not broken, fix it until it is
|
|
|
|
|
Coder For Hire wrote: I'm not trying to change the struct, I'm try to change the departmentId. That's the problem. You can change the struct, but assigning to its fields (no matter if it's with a property or not) would do nothing (and is banned because it is always a bug).
Remember that properties are just syntactic sugar for get and set methods. You can see this in effect in a decompiler (you may have to mess with settings). Using TheDepartment in a context where it is read from (as you do here) then you're really calling a get-method that returns it. So it's a copy. You're making a copy, calling a set-method on it, then the copy disappears and really nothing has happened at all (unless the properties have side effects). At least, that's what you would be doing if it wasn't an error to write this. That's a sort of unofficial way to look at it though, properties and methods do act differently, for example if you emulate a property using your own getter and setter then you wouldn't get this compile error (you'd get the useless behaviour I described above).
This "weird difference" between fields and properties also exists between elements of an array and indexers (in particular this means changing an array of structs to List<T> does not always work).
To quote the spec,
ECMA 334, §14.5.4 Member access: ... if E is a property or indexer access, then the value of the property or indexer access is obtained
(§14.1.1) and E is reclassified as a value. This says that TheDepartment is a value, andECMA 334, §18.3.3 Assignment: When a property or indexer of a struct is the target of an assignment, the instance expression associated with
the property or indexer access shall be classified as a variable. If the instance expression is classified as a
value, a compile-time error occurs. This is described in further detail in §14.14.1. says that if the target of assignment is a property of a struct and the instance is a value, then it's an error. So, DepartmentId cannot be the target of assignment here.
|
|
|
|
|
Just to add to what Harold says, the problem is that Department is a struct, and thus a value type - so when you use a property to access the value what is returned is a copy of the value rather than a reference to the value itself - so when you change the value of a field or property within the copy, it will have no effect on the actual value in your class.
Try it: change the struct to a class and it will return a reference to the value instead - and it'll all compile fine.
Alternatively, manually implement the property in your Employee class and use the backing value directly:
public class Employee
{
private Department _TheDepartment;
public Department TheDepartment
{
get { return _TheDepartment; }
set { _TheDepartment = value; }
}
public Employee()
{
_TheDepartment.DepartmentId = 100;
}
}
public struct Department
{
public int DepartmentId { get; set; }
}
Because that way you are directly referring to the valuetype, instead of a copy.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
I am hesitant to add any words to the astute explanations offered by Harold, and Griff. However, I can't help providing you with a working example, created in Visual Studio 2013 using FrameWork 4.5, that may intrigue you:
namespace Sanebox2
{
public class Employee
{
public Department TheDepartment { get; set; }
public Employee(int departmentid = 100)
{
TheDepartment = new Department(departmentid);
}
}
public struct Department
{
public int DepartmentId { get; set; }
public Department(int id) : this()
{
DepartmentId = id;
}
}
}
«To kill an error's as good a service, sometimes better than, establishing new truth or fact.» Charles Darwin in "Prospero's Precepts"
modified 13-Apr-15 7:35am.
|
|
|
|
|
Or, without changing the Department structure:
TheDepartment = new Department { DepartmentId = departmentId };
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Interesting, Richard. I am em-bare-assed to say that I can't explain (satisfactorily, to myself) exactly why adding the call to the base initializer makes this work. I assume it has something to do with the "parametric constructor" mentioned in various places I've searched for an answer to this.
cheers, Bill
«To kill an error's as good a service, sometimes better than, establishing new truth or fact.» Charles Darwin in "Prospero's Precepts"
|
|
|
|
|
I guess it's due to compiler error CS0188[^] - all fields in a struct have to be assigned by a constructor before the constructor can call a method in the struct .
Setting a property counts as calling a method on the struct , which you can't do until all of the fields have been assigned. Since you're using an automatic property, you can't directly access the backing field to initialize it. Therefore, the only way to initialize it is to call the default parameterless constructor (which all struct s have), which initializes all of the fields to their default values.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
What does the ": this()" do?
I can't find an explanation anywhere.
Removing it doesn't seem to have any effect.
If it's not broken, fix it until it is
|
|
|
|
|
You shouldn't be able to compile the code without it - you'll get compiler error CS0188[^] - "The 'this' object cannot be used before all of its fields are assigned to".
- All fields in a struct have to be assigned by a constructor before the constructor can call a method in the struct.
- Setting a property counts as calling a method on the struct, which you can't do until all of the fields have been assigned.
- Since you're using an automatic property, you can't directly access the backing field to initialize it.
- Therefore, the only way to initialize the field is to call the default parameterless constructor first.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I just saw this on SO:
In C#, these are some common memory leaks:
•Not removing event listeners. Any event listener that is created with an anonymous method or lambda expression that references an outside object will keep those objects alive. Remember to remove event listeners when they are no longer used.
Can someone show me an example of this in an anonymous method? I'd like to see how C# looks like that causes this.
Thanks
If it's not broken, fix it until it is
|
|
|
|
|
Following in google seems to work for me
C# anonymous event listener example
|
|
|
|
|
So the reason I asked is because I have this:
using (WebClient client = new WebClient())
{
client.DownloadProgressChanged += (sender, e) =>
{
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn / totalBytes * 100;
file.PercentDone = Math.Truncate(percentage);
};
client.DownloadFileCompleted += (sender, e) =>
{
Files.Remove(file);
};
await client.DownloadFileTaskAsync(new Uri(file.FileName), outputFile);
}
I've never dealt with leaks before, and I'm handling the events using lamdas. Isn't there a protential here for a memory leak?
If it's not broken, fix it until it is
|
|
|
|
|
Do not know why the above post was deleted
|
|
|
|
|
I have a piece of code in c++ and I want to know how it can be in C# :
int m_it[MAX_BC];
int m_iKe[MAX_ROUNDS][MAX_BC];
char const* a_pchIn;
int* pi = m_it;
for(i=0; i<8; i++)
{
*pi = ((unsigned char)*(a_pchIn++) << 24);
*pi |= ((unsigned char)*(a_pchIn++) << 16);
*pi |= ((unsigned char)*(a_pchIn++) << 8);
(*(pi++) |= (unsigned char)*(a_pchIn++)) ^= m_iKe[0][i];
}
In C# ?
Thank you
|
|
|
|
|
This answer might erk a few programmers here in Discussions, but I can recall having a moderate amount of success taking C++ code verbatim and pasting it as C# code in the C# code behind module I was working on, attempting a compile, THEN ACTUALLY working from the compiler error list to clear the syntax breaks while F2-ing the HELP tome.
'Might try this if you find no other solution ...
|
|
|
|