小编Olt*_*ter的帖子

"我的字节在哪里?" 或调查文件长度特征

这是我关于以块的形式下载文件的问题的延续.解释会很大,所以我会尝试将它分成几个部分.

1)我试图做什么?

我正在为Window-Phone应用程序创建一个下载管理器.首先,我试图解决下载大文件的问题(解释在上一个问题中).不,我想添加"可恢复的下载"功能.

2)我已经做了什么.

目前,我有一个运行良好的下载管理器,可以包含Windows Phone RAM限制.这个管理器的情节是,它允许使用HTTP Range标头下载小块文件.

快速解释它的工作原理:

该文件以恒定大小的块的形式下载.我们称这个大小为"delta".下载文件块后,它将以附加模式保存到本地存储(硬盘,在WP上称为隔离存储)(因此,下载的字节数组始终添加到文件末尾).下载单个块后的语句

if (mediaFileLength >= delta) // mediaFileLength is a length of downloaded chunk
Run Code Online (Sandbox Code Playgroud)

检查.如果这是真的,那意味着还有一些东西需要下载,这个方法是递归调用的.否则就意味着,这个块是最后一个,并且没有什么可以下载的.

3)有什么问题?

直到我在一次性下载时使用这个逻辑(我的意思是,一次性开始下载文件并等到下载完成后),这种方式运行良好.但是,我决定,我需要"简历下载" 功能.所以,事实:

3.1)我知道,文件块大小是一个常量.

3.2)我知道,文件完全下载与否.(这是我的app逻辑的间接结果,不会因为解释而疲惫不堪,只是假设,这是事实)

假设这两个语句我可以证明,下载的块的数量等于 (CurrentFileLength)/ delta.其中CurrentFileLenght是已下载文件的大小(以字节为单位).

要继续下载文件,我应该只设置所需的标头并调用下载方法.那似乎是逻辑,不是吗?我试图实现它:

    // Check file size
    using (IsolatedStorageFileStream fileStream = isolatedStorageFile.OpenFile("SomewhereInTheIsolatedStorage", FileMode.Open, FileAccess.Read))
    {
      int currentFileSize = Convert.ToInt32(fileStream.Length);
      int currentFileChunkIterator = currentFileSize / delta;
    }
Run Code Online (Sandbox Code Playgroud)

我看到的结果是什么?下载的文件长度等于2432000字节(delta为304160,文件总大小约为4.5 MB,我们只下载了一半).结果大约是7,995.(它实际上有long/int类型,所以它是7而应该是8!)为什么会发生这种情况?简单的数学告诉我们,文件长度应该是2433280,所以给定的值非常接近,但不相等. …

c# size byte

12
推荐指数
1
解决办法
438
查看次数

以块的形式下载文件(Windows Phone)

在我的应用程序中,我可以从网上下载一些媒体文件.通常我使用WebClient.OpenReadCompleted方法下载,解密并将文件保存到IsolatedStorage.它运作良好,看起来像这样:

 private void downloadedSong_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e, SomeOtherValues someOtherValues) // delegate, uses additional values
        {
            // Some preparations

                try
                {
                   if (e.Result != null)
                   {
                    using (isolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        // working with the gained stream, decryption
                        // saving the decrypted file to isolatedStorage
                        isolatedStorageFileStream = new IsolatedStorageFileStream("SomeFileNameHere", FileMode.OpenOrCreate, isolatedStorageFile);
                        // and use it for MediaElement
                        mediaElement.SetSource(isolatedStorageFileStream);
                        mediaElement.Position = new TimeSpan(0);
                        mediaElement.MediaOpened += new RoutedEventHandler(mediaFile_MediaOpened);

                        // and some other work
                     }
                    }
                 }
                 catch(Exception ex) 
                 {
                  // try/catch …
Run Code Online (Sandbox Code Playgroud)

c# download chunking windows-phone-7

6
推荐指数
1
解决办法
2407
查看次数

如何在OSX中调试XPC服务和客户端应用程序之间的通信

我正在尝试编写一对简单的"客户端应用程序"和"XPC服务".我能够从客户端启动xpc服务(即我可以看到在Activity监视器进程列表中运行的服务),但是当我尝试发送任何具有响应块的请求时,我收到错误:"无法与之通信帮助应用程序."

这里最糟糕的是错误没有给我任何关于出错的信息.而且我也无法正确调试服务.据我所知,正确的方法是附加一个调试器进行处理(Debug-> Attach to process,也见这里).我在一个工作区中同时拥有客户端和服务项目.

当我从xcode运行客户端并尝试将调试器附加到已启动的服务时,以"无法附加到pid:X"错误结束.

如果我存档客户端应用程序从app文件运行它然后尝试将调试器附加到服务结果是相同的.

从我能想象的服务中记录内容的唯一方法是编写一个记录器类,将数据写入某个文件.尚未尝试过这种方法,但这看起来很疯狂.

所以我的问题是:

a)如何在收到诸如"无法与帮助应用程序通信"这样的非信息性响应时找出问题所在?

b)而且,首先调试xpc服务的正确方法是什么?上面的链接从现在开始已有5年了,不过我可以看到有些人说"附加到调试器"无效.

代码本身很简单:

XPC服务,监听器实现:

#import "ProcessorListener.h"

@implementation ProcessorListener

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
{
    [newConnection setExportedInterface: [NSXPCInterface interfaceWithProtocol:@protocol(TestServiceProtocol)]];
    [newConnection setExportedObject: self];
    self.xpcConnection = newConnection;

    newConnection.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol: @protocol(Progress)];

    // connections start suspended by default, so resume and start receiving them
    [newConnection resume];

    return YES;
}

- (void) sendMessageWithResponse:(NSString *)receivedString reply:(void (^)(NSString *))reply
{
    reply = @"This is a response";
}

- (void) sendMessageWithNoResponse:(NSString *)mString
{
    // no response …
Run Code Online (Sandbox Code Playgroud)

macos service xpc objective-c

6
推荐指数
1
解决办法
893
查看次数

Windows Phone 8.1"按设计"是否破坏了WebBrowser视口高度?

实际上,这个问题是在开发Cordova应用程序时发现的,这就是为什么我无法切换到新的WebView但必须继续使用Cordova的扩展WebBrowser.但是我创建了一个没有Corodova的简单测试来验证问题是WebBrowser本身而不是Cordova.

我的测试页面有以下代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Mobile sandbox</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, height=device-height, user-scalable=no">
        <script type="text/javascript" src="libs/jquery/jquery.min.js"></script>
    </head>
    <body>
        <style>
            @-ms-viewport{width:device-width; height:device-height;} /* we need this because according to this article http://trentwalton.com/2013/01/16/windows-phone-8-viewport-fix/  meta viewport does not work across WP devices but -ms-viewport works */

            html, body {
                margin: 0;
                padding: 0;
                overflow: hidden; /* crop away everything, don't show scrollbars */
            }

            #allContainer {
                top: 0px;
                left: 0px;
                right: 0px;
                bottom: 0px;
                background-color: green;
                position: absolute; /* to make …
Run Code Online (Sandbox Code Playgroud)

viewport webbrowser-control windows-phone-8

5
推荐指数
1
解决办法
3182
查看次数

Flot Ticks动态创建

我正在使用flot库,并且在正确显示x轴标签时遇到一些问题.

如果我有一个测试数据数组,像这样:

  var textData = ["51% <br> 101 <br> data1", "11% <br> 32 <br> data2", "26% <br> 64 <br> data3"];
Run Code Online (Sandbox Code Playgroud)

然后使用它以这种方式创建x轴标签:

 xaxis: {
            tickLength: 0,
            show: true,
            ticks: [[0, textData[0]], [1, textData[1]], [2, textData[2]]]
        },
Run Code Online (Sandbox Code Playgroud)

工作正常:

在此输入图像描述

这适用于测试一,但是,数据项的数量可能会有所不同,所以我应该动态创建x轴值.我试过这个:

     xaxis: {
                tickLength: 0,
                show: true,
            }
     })

     for (var i = 0; i < textData.length; i++) {
        ticks.push(i, textData[i]);
    }
Run Code Online (Sandbox Code Playgroud)

这将创建图表,但x轴标签将显示不正确:

在此输入图像描述

任何帮助将不胜感激.

jquery flot

0
推荐指数
1
解决办法
1432
查看次数