Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как прочитать файловый поток? 
:(
    Опции темы
Tectoder
Дата 11.11.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Как прочитать поток(altternate file stream) ABC файла C:\1.txt, без использования функций WinApi?
PM   Вверх
stab
Дата 11.11.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Хм, зачем они интересно это запретили для FileStream, не ясно. Может быть попробовать через CreateFile и потом хэнл передать в конструктор FileStream. В обычных конструкторах проверка вроде по пути файла осуществляется, может быть для хэндлов таких проверок нет.

Добавлено через 40 секунд
.. или надо абсолютно без Win32 API?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mr.DUDA
Дата 11.11.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Без использования функций WinAPI невозможно прочитать файл. Даже fopen/fread внутри себя юзают тот самый CreateFile от которого вам нужно избавиться. Посему, юзайте FileStream, StreamReader и т.п. и не загоняйтесь.


--------------------
user posted image
PM MAIL WWW   Вверх
Tectoder
Дата 12.11.2007, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Цитата(stab @  11.11.2007,  20:31 Найти цитируемый пост)
или надо абсолютно без Win32 API? 
Ну, я написал, нужно без WinAPI
Цитата(mr.DUDA @  11.11.2007,  22:56 Найти цитируемый пост)
Даже fopen/fread внутри себя юзают тот самый CreateFile от которого вам нужно избавиться. Посему, юзайте FileStream, StreamReader и т.п. и не загоняйтесь. 
 smile
Во первых, я не могу юзать WinAPI потому что политики безопасности на целевом компьютере запрещают использование импортов API-функций.
Во вторых, использование WinAPI лишает возможности запускать программу под mono, разве нет?
PM   Вверх
archeg
Дата 12.11.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(Tectoder @  12.11.2007,  00:46 Найти цитируемый пост)
Во первых, я не могу юзать WinAPI потому что политики безопасности на целевом компьютере запрещают использование импортов API-функций.Во вторых, использование WinAPI лишает возможности запускать программу под mono, разве нет

Я так понимаю в случае FileStream, StreamReader юзаешь винапи не напрямую а через реализацию, которая написана уже во фреймворке. Соответственно на моно, она написана как-то по-другому, с использованием LinuxAPI  smile Код то от этого не меняется. И будет работать и там и там. Так в чем проблема тогда? 


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
stab
Дата 12.11.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(Tectoder @  12.11.2007,  04:46 Найти цитируемый пост)
Ну, я написал, нужно без WinAPI

Значит придётся отказаться от использования потоков.  smile 



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Tectoder
Дата 12.11.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Цитата(archeg @  12.11.2007,  17:17 Найти цитируемый пост)
Так в чем проблема тогда?  
Эмм, предлагаю тебе углубится в суть топика
PM   Вверх
stab
Дата 13.11.2007, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(Tectoder @  12.11.2007,  04:46 Найти цитируемый пост)
Во вторых, использование WinAPI лишает возможности запускать программу под mono, разве нет? 

Под *nix есть схожий API потоков?

Как бы там ни было, можно попробовать достучаться через рефлекшен до каких-нибудь приватных членов, вроде Microsoft.Win32.Win32Native.SafeCreateFile. Незнаю правда что об этом думают политики безопасности. smile


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Tectoder
Дата 13.11.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Цитата(stab @  13.11.2007,  05:53 Найти цитируемый пост)
Под *nix есть схожий API потоков?
Ну если FS ext3 поддерживает потоки, то наверное и ядро?
Честно говоря, я ен представляю как через reflection достучаться до приватных членов. То есть получить инфу наверное получится, но вот как вызвать... Почти наверняка не получится.

Добавлено через 42 секунды
Кроме того Microsoft.Win32 это наверное то же что и com.sun в java, то бишь то, что порядочные приложения использовать не должны?
PM   Вверх
stab
Дата 13.11.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата(Tectoder @  13.11.2007,  16:02 Найти цитируемый пост)
Кроме того Microsoft.Win32 это наверное то же что и com.sun в java, то бишь то, что порядочные приложения использовать не должны? 

Да, это грязные трюки.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
stab
Дата 16.11.2007, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



на всякий случай:

Код

using System;
using System.Reflection;
using Microsoft.Win32.SafeHandles;
using System.IO;

namespace Vingrad.SafeCreateFile
{
    class Program
    {
        static void Main(string[] args)
        {
            Type win32Native = Type.GetType("Microsoft.Win32.Win32Native");

            MethodInfo safeCreateFile = win32Native.GetMethod("SafeCreateFile",
                BindingFlags.Static | BindingFlags.NonPublic);
            SafeFileHandle handle = (SafeFileHandle) safeCreateFile.Invoke(null,
                new object[] { @"c:\test.txt", GENERIC_READ, 0, null, OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL, null });

            StreamReader reader = new StreamReader(new FileStream(handle, FileAccess.Read));
            string text = reader.ReadToEnd();
            reader.Close();
            handle.Close();

            Console.WriteLine(text);
            Console.ReadLine();
        }

        const int GENERIC_READ = unchecked((int) 0x80000000); // :)
        const int OPEN_EXISTING = 3;
        const int FILE_ATTRIBUTE_NORMAL = 0x80;
    }
}



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0785 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.