|
Getting the MAC is pretty simple: Retrieving IP and MAC addresses for a LAN[^] has the code (search for GetMacAddress).
Storing it isn't difficult either. If you save it in a "sensible place" under a folder whose name is the application Guid in a file you can read: Where should I store my data?[^] shows the code.
The PhysicalAddress Class (System.Net.NetworkInformation)[^] has both ToString and Parse methods which help you store it.
But...If this is as a anti-piracy method, it's not that good. MAC addresses are easy to spoof, and you will probably annoy more legitimate users than dissuade thieves.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Is it possible to change the url of a winform webbrowser through an external c#.net application? Basically I'd like to pick a button in one application, and have it start the exe for the other and navigate it to the correct url
|
|
|
|
|
You can pass command line arguments to the .exe
Snaffled from SO with this search[^]
static void Main(string[] args)
{
for (int i = 0; i < args.Length; i++) {
Console.WriteLine("args[{0}] == {1}", i, args[i]);
}
}
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Thank you, it's what I needed
|
|
|
|
|
edit based on Alan's suggestion below:
What I am looking for is a way to convert the Interface (non-generic Interface) instances ... where the instance is a generic Class ... from the Interface instance to the generic Class instance ... using Reflection, rather than using "world-knowldege" of the specifically defined generic Class parameter Types being used at run-time.
I think, at this point, since that use-case is pretty much what System.Dynamic enables through late-binding that, perhaps, it's better to go ahead snd use System.Dynamic. ... But, I'm not sure. Remember, if I weren't confused, I would not be here
... end edit ...
assuming:
1. an Interface which is not generic
public interface ISomeInterface
{
int SomeInt { set; get; }
} 2. a Class which is generic which inherits from the Interface
public class SomeClass<T> : ISomeInterface
{
public int SomeInt { set; get; }
public T SomeT { set; get; }
public SomeClass(int anint, T somet = default(T))
{
SomeInt = anint;
SomeT = somet;
}
} 3. A collection of instances of SomeClass<T> as ISomeInterface
List<ISomeInterface> someInstances = new List<ISomeInterface>();
someInstances.Add(new SomeClass<int>(100, 200));
someInstances.Add(new SomeClass<string>(200, "whoop de doo")); 4. at run-time you have a reference to a member of the 'someInstances list:
ISomeInterface reference = someInstances[1]; 5. to detect which generic Type 'reference is:
Type t = reference.GetType().GenericTypeArguments[0];
if (t == typeof(string))
{
var refAsString = reference as SomeClass<string>;
string whoopee = refAsString.SomeT;
} 6. is there a better way ... assuming you have a valid need to maintain such a collection of Interface instances and de-reference them into their generic Types at run-time.
Notes:
1. I don't really like doing things this way ... using reflection ... but, I do have a case where either I need to do this, or use System.Dynamic to get away with "Type murder"
2. I am aware of the use of 'Convert.ChangeType, and its limitations, and I believe it is not usable in this case because you need to know what Type to cast to in order to use it. Of course, when your generic parameter is a complex Type, you can't use the 'ChangType method that relies on 'TypeCode.
3. the code example shown here is, of course, simplified for discussion purposes; in practice the generic parameter T may hold references to any object, Class, Struct, etc.
... edit ...
Another way I have experimented with this scenario is to add a Property of Type 'Type to the Interface:
public interface ISomeInterface
{
int SomeInt { set; get; }
Type ThisType { set; get; }
} Which is set in the ctor of the Class:
public SomeClass(int anint, T somet = default(T))
{
SomeInt = anint;
SomeT = somet;
ThisType = typeof(T);
} Which results in de-referencing code like this:
if (someClassInstance.ThisType == typeof(SomeComplexClass))
{
var nativeTypedSomeClass = someClassInstance as SomeClass<SomeComplexClass>;
} That's getting close to the solution that Alan proposed below.
... end edit ...
thanks for your response !
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
modified 30-May-16 8:37am.
|
|
|
|
|
I'm not sure I understand the reason for the complexity. The final code fragment shows the use of the 'as' operator to perform a cast, implying that the type is known at compile time. If in fact all types are known then why use reflection at all, just go with is or as.
public void CastingCouch() {
List<ISomeInterface> someInstances = new List<ISomeInterface>();
someInstances.Add(new SomeClass<int>(100, 200));
someInstances.Add(new SomeClass<string>(200, "whoop de doo"));
someInstances.Add(new SomeClass<DateTime>(300, DateTime.Now));
foreach (ISomeInterface reference in someInstances) {
Console.Write("{0} ", reference.GetType());
if (reference is SomeClass<string>) {
Console.WriteLine("String");
} else if (reference is SomeClass<int>) {
Console.WriteLine("Int");
} else {
Console.WriteLine("Don't know");
}
}
}
Alan.
|
|
|
|
|
Alan, thanks for your suggestion ! I've edited my question to, I hope, more accurately show what I am looking for.
In many cases, what you propose is all that one needs; you could just as well have a Switch statement based on the Type Name to differentialy call whatever code you wanted based on Type at run-time.
However, in this case, there may be an unknown variety of instances using different generic Types because a 3rd. party is using the library. And, I am interested in seeing how one would achieve this, at minimal "cost."
cheers, Bill
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
modified 30-May-16 14:43pm.
|
|
|
|
|
If you don't have a list of "known" types, how are you planning to use the "dereferenced" type? There's nothing you can cast it to other than object , which doesn't really give you anything interesting to play with.
Also, you existing code in #5 won't work if someone implements your interface in a different class:
class SomeOtherClass : ISomeInterface { ... }
class YetAnotherClass<TKey, TValue> : ISomeInterface { ... }
someInstances.Add(new SomeOtherClass(42));
someInstances.Add(new YetAnotherClass<NotTheTypeYoureLookingFor, TheDroids>());
You'd need more checks to ensure it's the expected type:
Type referenceType = reference.GetType();
if (referenceType.IsGenericType && referenceType.GetGenericTypeDefinition == typeof(SomeClass<>))
{
Type t = referenceType.GetGenericArguments()[0];
...
}
else
{
}
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Please provide the complete code if possible. That would be of great help.
Note:I am currently using Visual Studio 2012 and Excel 2013.
|
|
|
|
|
|
As Richard says, we are not a code-to-order service.
If you want someone to write your code, you have to pay - I suggest you go to Freelancer.com and ask there.
But be aware: you get what you pay for. Pay peanuts, get monkeys.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
|
Hi,all:
I want to read Text File like:
123
456
789
...
Now i use readline() to read it. But really "789" is not "789", it can be "abc","def" or blank line,i don't know it. I hope when i finished read "456",i can try to read nextline,if it is not "789",i hope when i use nextline(), i can still can get this line.
|
|
|
|
|
The simplest way is to read all the lines at once:
string[] lines = File.ReadAllLines(pathToFile); You can just use a basic loop to access the lines in any order you need.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
OK,thank you. But I want to use stream style to read,because my file content is big, i heard that stream is better when fil content is big.
|
|
|
|
|
Depends on the size. "Big" is a relative term!
Streaming isn't difficult either:
using (StreamReader read = new StreamReader(@"D:\Temp\MyBigFile.txt"))
{
while (read.Peek() >= 0)
{
string line = read.ReadLine();
}
}
But...unless your file is really, really big - like 250,000,000 lines plus - it's not necessarily going to be much more efficient than reading all the lines at once.
If you have to "go back" to lines, you can use
long pos = read.BaseStream.Position;
before each ReadLine to find out where in the file you are, and use Seek to go back there. But...remember that if you are storing the position of all lines, you can't store more than 250,000,000 on a 64 bit system, and 500,000,000 on a 32 bit system as there is an upper limit to the size of an array in .NET
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
OK,i Know,Thanke you very much
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
This may or may not work depending on the version of the .NET framework.
It appears that at least up through .NET 4.5.1, the Position property of a FileStream returned only the information about how far the buffering had read.
namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(@"..\..\Program.cs"))
{
if (reader.EndOfStream)
return;
System.Console.WriteLine("Stream.Position = {0}", reader.BaseStream.Position);
}
System.Console.ReadLine();
}
}
}
This outputs:
Stream.Position = 455
(But looking at the 4.6.1 source code for FileStream , it appears that it will give the correct Position based on the actual read position.)
"Fairy tales do not tell children the dragons exist. Children already know that dragons exist. Fairy tales tell children the dragons can be killed."
- G.K. Chesterton
|
|
|
|
|
What you want to do, Read text file Line by line or at once, if you want to read it at once then you can refer a above solution given by OriginalGriff
if you want to read it line by line use below code
using System;
using System.IO;
class Program
{
static void Main()
{
foreach (string line in File.ReadLines("c:\\file.txt"))
{
Console.WriteLine("-- {0}", line);
}
}
}
Find More .Net development tips at : .NET Tips
The only reason people get lost in thought is because it's unfamiliar territory.
|
|
|
|
|
Um...that doesn't read it line by line - it reads them all and processes them line by line in a loop afterwards.
If you want to read line by line you need to loop on StreamReader.ReadLine instead.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Yes, basically it reads it at once but later split it by lines
Find More .Net development tips at : .NET Tips
The only reason people get lost in thought is because it's unfamiliar territory.
|
|
|
|
|
Then ,how can i do it use stream ? line by line? I found Peek() ,but only can read 1 char, i need try read 1 line.
|
|
|
|
|
use below code
const Int32 BufferSize = 128;
using (var fileStream = File.OpenRead(fileName))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize)) {
String line;
while ((line = streamReader.ReadLine()) != null)
}
Find More .Net development tips at : .NET Tips
The only reason people get lost in thought is because it's unfamiliar territory.
|
|
|
|
|
A stream doesn't know about lines; a line-feed is a character. So, you reed 1 char, until you find a new-line character, then process.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|